**什么是集合:(只能存储对象,对象类型可以不一样)长度可变,可在多数情况下使用。Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。
Collection接口又有3种子类型,List、Set和Map,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。Map常用的有HashMap,LinkedHashMap等。**
**一.Set集合(继承了Collection接口)(一般企业开发用的最多)**
1.Set 集合属于单列集合,不允许包含重复元素;
2.判断元素是否重复的标准为对象的 equals 方法,存在时返回 false,不存在返回 true;
3.元素的排序规则,由相应的实现类决定,分为无序、元素大小排序、写入顺序排序;
4.初始化大小,扩容参考 HashMap。
5.Set的接口实现有:HashSet,TreeSet,LinkedSet
5.1
Set 接口继承Collection,用于存储不含重复元素的集合。几乎所有的Set实现都是基于同类型Map的,简单地说,Set是阉割版的Map。
每一个Set内都有一个同类型的Map实例(CopyOnWriteArraySet除外,它内置的是CopyOnWriteArrayList实例),Set把元素作为key存储在自己的Map实例中,value则是一个空的Object。
Set的常用实现也包括 HashSet、TreeSet、LinkedSet等,原理和对应的Map实现完全一致,
**二.List(继承了Collection接口)(一般查询用的最多)**
1.List 集合属于单列、有序的、允许元素重复、可以为 null 的集合;
2.List 接口的实现类主有:ArrayList、LinkedList、Vector。
2.1 ArrayList(一般用来查询):
ArrayList的扩容是当前的1.5倍(大于默认值10的时候)。
优点:查询块
缺点:就是LinkedList的优点
2.2 LinkedList
优点:增删改块
缺点:就是ArrayList的优点
2.3 Vector
Vector是线程安全的。
Vector大部分基本方法都是synchronized的,性能低于ArrayList。
Vector可以定义数组的长度扩容的因子。而ArrayList不能。
3.二者的遍历效率接近,但需要注意,遍历LinkedList时应用iterator方式,不要用get(int)方式,否则效率会很低。
**三.Queue队列(先进先出)**
关系图
**四.Iterable**
1.实现Iterable接口类可以增强for等
2.实现Iterable接口的集合类必须提供一个名为Iterator()的方法,该方法的返回值必须为Iterable
**五.Map(键值对)**
1.Map 集合属于双列Key-value键值对的集合,Key不允许重复,是否允许为 null 根据实现类而定,Value 随意;
2.Map 接口的实现类有:HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap。
2.1 HashMap
HashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap是部分实现Map接口的抽象类。在平时的开发中,HashMap的使用还是比较多的。
我们知道ArrayList主要是用数组来存储元素的,LinkedList是用链表来存储的。
2.2 LinkedHashMap
LinkedHashMap继承自HashMap,它主要是用链表实现来扩展HashMap类,HashMap中条目是没有顺序的,但是在LinkedHashMap中元素既可以按照它们插入图的顺序排序,也可以按它们最后一次被访问的顺序排序。
2.3 TreeMap
按照比较结果的升序保存建。
2.4 Hashtable(哈希表又叫散列队)
1.继承Dictionary
2 默认的长度为11扩容因子是当前长度的百分之75。
3.查询块,增删该慢
2.5 ConcurrentHashMap
继承AbstractMap,Concurrent,并发,从名字就可以看出来ConcurrentHashMap是HashMap的线程安全版。同HashMap相比,ConcurrentHashMap不仅保证了访问的线程安全性,而且在效率上与HashTable相比,也有较大的提高。
关系图