面试中经常会问到关于list和map的问题:
一、ArrayList和LinkList的区别?
1.关于线程安全问题,常常会有人说LinkList是线程安全的,这里说明一下,ArrayList和LinkedList都不是线程安全的,Vector是线程安全的。
2.底层数据结构不同,ArrayList是基于数组实现的(动态数组),LinkedList是基于链表实现的(双向链表)。
3.适用的场景不一样,ArrayList适用于随机查询,LinkedList适用于增删,对于查询ArrayList比LinkedList效率高一些,因为ArrayList可以根据下标进行查询,而LinkedList需要移动指针从前往后依次查找;对于增删LinkedList比ArrayList效率高一些,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
4.扩展一个小知识:ArrayList和LinkedList都是实现了List的接口,但是LinkedList还额外实现了Deque接口,所以可以当队列使用。
5.数据结构不同的具体分析可以看此博主详细分析有图有真相可以参考
二、HashMap
常见的面试题
具体分析 HashMap、LinkedHashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别