arraylist和linkedlist
共性:arraylist和linkedlist都是list接口的实现类,所以都实现了list所有未实现的方法,只是实现方法不同。
区别:list接口的实现不同。
arraylist以数组的形式实现了list接口,所以使用arraylist来实现快速随机获取对象的要求会更高效。
linkedlist使用链表实现列表接口,所以在执行插入和移除动作时比arraylist更高效。适用于实现堆栈和队列。
哈希表和哈希表
共性:都实现了地图接口。
差异:
(1)继承的父类不同
hashtable从dictionary类继承,hashmap从abstractmap类继承。
(2)线程安全性不同
hashtable方法是同步,而hashmap中的方法默认是不同步的。
(3)提供contains方法
hashmap去掉了hashtable的contains方法,改成了containsvalue和containskey,因为contains方法容易被误解。
hashtable保留了三种方法:contains、containsvalue和containskey,其中contains和containsvalue的作用相同。
(4)4)键和值是否允许空值。
在哈希表中,键和值都不允许为空值。在hashmap中,null可以作为一个键,而且这样的键只有一个;一个或多个键可以有空值。
(5)两种遍历模式的内部实现不同。
hashmap使用迭代器;;hashtable使用迭代器和枚举。
(6)哈希值不同
哈希值的用法不同。hashtable直接使用对象的hashcod
arraylist类似于数组,按顺序存储在内存中。linkedlist类似于链表,没有顺序,但是每个元素都是通过指针链接的。因为linkedlist是无序存储的,所以它可以入到任何地方,只要指针指向它。arraylist是有序的,插入要遍历到你想插入的位置,所以效率比较低。
因为arraylist是有序的,查询时输入索引就可以快速找到,而linkedlist不是。