1. arraylist
基于数组方式实现,无容量的限制。
在执行插入元素时可能要扩容,在删除元素时并不会减少数组的容量。
如果希望相应的缩小数组容量,可以调用trimtosize()
在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。
非线程安全。
2. linkedlist
基于双向链表机制实现。
元素的插入、移动较快。
非线程安全。
3. vector
基于object数组的方式来实现的。
基于synchronized实现的线程安全的arraylist。
在插入元素时容量扩充的机制和arraylist稍有不同:
如果capcacityincrement > 0, 则object数组的大小扩大为现有size加上capcacityincrement;
如果capcacityincrement < 0, 则object数组的大小扩大为现有size的两倍;
4. stack
基于vector实现,支持lifo。
5. hashset
基于hashmap实现,无容量限制。
不允许元素重复。
非线程安全。
6. treeset
基于treemap实现,支持排序。
非线程安全。
7. hashmap
采用数组方式存储key、value构成的entry对象,无容量限制。
基于key hash寻找entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决。
在插入元素时可能会扩大数组的容量,在扩大容量时会重新计算hash,并复制对象到新的数组中。
非线程安全。
8. treemap
基于红黑树实现,无容量限制。
非线程安全。
-----------------------------------
适用场景:
对于查找和删除较为频繁,且元素数量较多的应用,set或map是更好的选择;
arraylist适用于通过为位置来读取元素的场景;
linkedlist 适用于要头尾操作或插入指定位置的场景;
vector 适用于要线程安全的arraylist的场景;
stack 适用于线程安全的lifo场景;
hashset 适用于对排序没有要求的非重复元素的存放;
treeset 适用于要排序的非重复元素的存放;
hashmap 适用于大部分key-value的存取场景;
treemap 适用于需排序存放的key-value场景。