ArrayList和LinkList相同点和区别:
共性:
都实现了List接口,都是list的实现类,处理list集合操作。
区别:
ArrayList:底层存储结构是数组,每个元素都有index标记元素所在位置,所以执行查询的时候速度比较快。但执行插入或删除时因为要移动这个元素后面所有元素的index,所以速度比较慢。而且但数组长度大于初始化长度时,每增加一个数组元素都需要扩容。
LinkList:底层存储结构是链表,和车链一样,一个元素只需要记录这个元素前面的那个元素和后面的那个元素,所以执行插入或删除时也只要改变前后两个元素的记录即可,因此比较快。但查询需要挨个查,因此比较慢。
Hashmap和hashtable共性和区别:
共性:
底层实现都是hash结构,既数组加链表。以长度为16的哈希结构为例。每个元素的key会除于16得到的余数1 2 3...16,所以排列的位置也是1 2 3...16,以key余数是1的所有元素为例,里面的元素存储结构是链表结构。
区别:
Hashmap继承AbstractMap类,hashtable继承Dictionary
Hashmap是非线程安全,hashtable是线程安全,ConcurrentHashMap是hashtabale的替代,拓展性比hashtable好。
Hashmap的key和value都可以为null,Hashtable不行
Hashtable被弃用的原因:
hashtable继承了被弃用的父类Dictionary
在单线程下hashmap效率更高,多线程下有concurrentHashmap替代hashtable