集合接口:

Collection(interface):List,Set,Queue;继承 Iterator 接口;

Map接口与Collection无关,键值对

 

List:ArrayList,LinkedList,Vector

ArrayList,Vector,都是基于数组的存储模型,可以通过下标(索引)直接找到数据,检索时间复杂度为O(1),在末尾插入,删除操作也是一样的,但是在其它位置增加,删除的时间复杂度为O(n)

LinkedList,基于双向链表结构,增加,删除的时间复杂度为O(1),检索时间复杂度为O(n)

频繁增删可选择LinkedList,频繁检索尽量选择ArrayList或Vector

ArrayList,Vector数组扩容,ArrayList扩容为原容量的1.5倍,Vector默认扩容为原来的2倍,可在初始化时配置参数capacityIncrement来设置增量

Vector是线程安全的,通过在方法上增加修饰符synchronized实现,性能会有所损耗

java.util.Collections中提供了一个静态内部类SynchronizedList也实现了线程同步,使用synchronized同步代码块(遍历未同步),详见SynchronizedList和Vector的区别

 

Map:HashMap,HashTable,ConcurrentHashMap,LinkedHashMap,TreeMap

HashMap,键和值都允许为null;线程不安全;数组默认初始长度为16,扩容为原长*2;位运算取哈希

HashTable,键值都不能为null;线程安全,方法用synchronized修饰;数组默认初始长度11,扩容为原长*2+1(左移1位 +1);取模得到哈希,因为线程安全、哈希效率的问题,HashMap效率比HashTable效率更高

ConcurrentHashMap,键值都不能为null;线程安全的HashMap的实现;哈希运算与HashMap不同

HashTable对对象加锁,当HashTable较大的时候,性能很差,ConcurrentHashMap引入了分割(Segment),将大的Map分成多个小的Segment中,在多线程下Lock的只是一个Segment的元素,从而提升操作性能

LinkedHashMap,保存了数据的插入顺序,遍历操作按先后插入顺序获得数据,较HashMap性能略差

TreeMap,实现了SortMap接口,保存的记录可根据键排序(默认升序),也可以指定排序的比较器,Iterator遍历得到的数据是已排序的

 

Set:HashSet,LinkedHashSet,TreeSet

Set不允许有重复元素的存在;Set是无序集合,List是有序集合;Set不能通过下标(索引)来访问数据

HashSet,底层实现采用hash表,提升查询效率

LinkedHashSet,内部使用散列以加快查询速度,同时使用链表维护元素的次序

TreeSet,可以对元素进行排序,需实现comparator接口

HashSet的add方法引用了HashMap的put方法,也是通过比较元素的hashCode,equals,来保证元素不重复,在使用自定义的类时,应重写方法hashcode(),equals()

 

Collection是接口,是一个顶级的集合接口,提供了一些接口的基础方法,主要的继承接口有List,Set,Queue

Collections是一个集合的工具类,提供了一系列的静态方法,同样的工具类有Arrays等

posted on 2019-03-15 17:50  MC伍  阅读(128)  评论(0编辑  收藏  举报