Java集合框架
- Java集合框架
- Collection
- Map
- Collection与Map的区别
- 常用Collection实现类基本使用
- 常用Map实现类基本使用
- 小结
Java集合框架
菜鸟教程
- 早在Java2中之前,Java就提供了特设类。比如:Dictionary,Vector,Stack,和Properties这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用Vector类的方式和使用Properties类的方式有着很大不同。
- 集合框架被设计成要满足以下几个目标。
①该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
②该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的扩展和适应必须是简单的。
整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如:LinkedList,Hash Set,和TreeSet等,除此之外你也可以通过这些接口实现自己的集合。
- Set下有HashSet,LinkedHashSet,TreeSet
- List下有ArrayList,Vector,LinkedList
- Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
Collection
- Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)
- Collection 接口存储一组不唯一,无序的对象。
1.Set
- Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。
- Set 接口存储一组唯一,无序的对象。
2.List
- List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
- List 接口存储一组不唯一,有序(插入顺序)的对象。
Set和List的区别
- Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
- Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
- List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
Map
- Map 接口存储一组键值对象,提供key(键)到value(值)的映射。
- Map.Entry
描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。
1.SortedMap
- 继承于 Map,使 Key 保持在升序排列。
2.AbstractMap
- HashMap, TreeMap, ConcurrentHashMap 等类的父类。
- TreeMap是有序的,HashMap和HashTable是无序的
HashMap与HashTable的主要区别
- Hashtable是线程安全的,HashMap不是线程安全的。
- HashMap效率较高,Hashtable效率较低。
- 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。
- Hashtable不允许null值,HashMap允许null值(key和value都允许)
- 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap
3.Enumeration
- 这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。
Collection与Map的区别
- Collection集合:单列集合,只能存储一种类型的元素,当作为:光棍
- Map集合:是一种键和值的映射关系(双列集合) 当作为:夫妻对
- 间接关系:HashSet依赖于Map接口的子实现类HashMap的
- TreeSet依赖于Map接口的子实现类TreeMap的
常用Collection实现类基本使用
- Set
HashSet
//实例化
HashSet<Object> hashSet = new HashSet<>();
//使用add动态添加内容
hashSet.add(new Object());
//使用size返回长度
hashSet.size();
//remove移除内容
hashSet.remove(new Object());
hashSet.remove(0);
//使用clear释放
hashSet.clear();
//其中一种遍历方法
for (Object o:hashSet){}
LinkedHashSet
//实例化
LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>();
//使用add动态添加内容
linkedHashSet.add(new Object());
//使用size返回长度
linkedHashSet .size();
//remove移除内容
linkedHashSet.remove(new Object());
linkedHashSet.remove(0);
//使用clear释放
linkedHashSet.clear();
//其中一种遍历方法
for (Object o:linkedHashSet){}
TreeSet
//实例化
TreeSet<Object> treeSet = new TreeSet<>();
//使用add动态添加内容
treeSet.add(new Object());
//使用size返回长度
treeSet.size();
//remove移除内容
treeSet.remove(new Object());
treeSet.remove(0);
//使用clear释放
treeSet.clear();
//其中一种遍历方法
for (Object o:treeSet){}
- List
ArrayList
//实例化一个ArrayList
ArrayList<Object> arraylist = new ArrayList<>();
//ArrayList使用add动态添加内容
arraylist.add(new Object());
//ArrayList使用size返回长度
arraylist.size();
//ArrayList使用remove移除内容
arraylist.remove(new Object());
arraylist.remove(0);
//ArrayList使用clear释放
arraylist.clear();
//其中一种遍历方法
for (Object o:arraylist){}
Vector
//实例化
Vector<Object> vector = new Vector<>();
//使用add动态添加内容
vector.add(new Object());
//使用size返回长度
vector.size();
//remove移除内容
vector.remove(new Object());
vector.remove(0);
//使用clear释放
vector.clear();
//其中一种遍历方法
for (Object o:vector){}
LinkedList
//实例化
LinkedList<Object> linkedList = new LinkedList<>();
//使用add动态添加内容
linkedList.add(new Object());
//使用size返回长度
linkedList.size();
//remove移除内容
linkedList.remove(new Object());
linkedList.remove(0);
//使用clear释放
linkedList.clear();
//其中一种遍历方法
for (Object o:linkedList){}
常用Map实现类基本使用
- AbstractMap
HashMap
//实例化
HashMap<Object,Object> hashMap = new HashMap<>();
//存入内容
hashMap.put(new Object(),new Object());
//获取长度
hashMap.size();
//以key主键删除目标内容
hashMap.remove(new Object());
//以key主键获取目标内容
hashMap.get(new Object());
//使用clear释放
hashMap.clear();
//其中一种遍历方法
for (Object key:hashMap.keySet()){}
TreeMap
//实例化
TreeMap<Object,Object> treeMap = new TreeMap<>();
//存入内容
treeMap.put(new Object(),new Object());
//获取长度
treeMap.size();
//以key主键删除目标内容
treeMap.remove(new Object());
//以key主键获取目标内容
treeMap.get(new Object());
//使用clear释放
treeMap.clear();
//其中一种遍历方法
for (Object key:treeMap.keySet()){}
Hashtable
//实例化
Hashtable<Object,Object> hashtable = new Hashtable<>();
//存入内容
hashtable.put(new Object(),new Object());
//获取长度
hashtable.size();
//以key主键删除目标内容
hashtable.remove(new Object());
//以key主键获取目标内容
hashtable.get(new Object());
//使用clear释放
hashtable.clear();
//其中一种遍历方法
for (Object key:hashtable.keySet()){}
小结
每个集合都有其特有的使用场景,这里只写了部分集合的区别对比,比如下图情况:
使用的时候可以根据自己的需求进行选取