首先我们需要对集合框架有一定的了解,此处我画了一个集合框架图,如下图:
对于ArrayList与LinkedList,我们分别从三个方面进行了对比说明,区别如下:
1. 底层数据结构:
ArrayList 和 LinkedList 在存储元素上前者采用数组存储,后者采用双链表存储数据
2. 存储数据选取:
头插和头删操作频繁适合选取LinkedList存储数据,时间复杂度达到最小O(1)。数组的随机访问效率最高,时间复杂度达到O(1),如果频繁的进行尾插尾删操作则一般情况下选择的是数组。
3. 遍历方式的区别:
ArrayList遍历使用到迭代器遍历Iterator。而LinkedList有两种遍历方式,一种是Iterator,另一种可以逆向遍历ListIterator。
HashTable和HashMap采用相同的存储机制,二者的实现基本一致,不同的是:
(1)HashMap是非线程安全的,HashTable是线程安全的,内部的方法基本都经过synchronized修饰。
(2)因为同步、哈希性能等原因,性能肯定是HashMap更佳,因此HashTable已被淘汰。
(3) HashMap允许有null值的存在,而在HashTable中key与value均不可以为null,有一个为null时直接抛出NullPointerException。
(4)HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。
而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。