基本关系
- Collection
--List
------ ArrayList
------ LinkedList
------Vector
------Stack
------------Set
- Map
--HashMap
--HashTable
--WeakHashMap
分析
Collction
List和Set同样继承Collection类。List是顺序表,根据下标访问,允许出现相同的值;Set不允许相同的值出现,常用来去除相同值的操作。
List:
ArrayList用数组储存,非同步,效率较高。常用于需要经常按下标查找的情况。在元素数目超过目前数组长度时,自动增长50%。
LinkedList使用链表结构存储数据,因此在插入删除操作中性能表现好,非同步,效率较高。常用于需要经常插入删除的情况下。
Vector和ArrayList都是数组结构的,但Vector是同步的,与此同时,Vector也损失了一部分效率。Vector在多个线程同时修改时,会抛出ConcurrentModificationException异常。
Stack继承Vector,实现了一个先进后出的堆栈。Stack刚创建时是个空栈。
Set:
Set不能传入相同的值,通常用于去除目录里重复的值。
Map
Map提供key到value的映射。通常使用是通过key来获取到value的值,因此一个Map中不能出现相同的key,每个key也只能映射一个value。
HashMap,非同步的,允许key或者value出现null。迭代子操作时间开销和HashMap的容量成正比。
HashTable,同步的,key和value都不能出现空值。查找时间是常数。通过initial capacity和load factor调整性能。
WeakHashMap,改进的HashMap,使用弱引用,也就是当key不在被外部引用时,该key可以被回收。
同步的:Vector,HashTable
非同步的: ArrayList,LinkedList,HashMap,WeakHashMap
注:Collections类可以提供以上几个类的同步解决方法,提供的同步方法多于自带同步的那两种。