文章目录
1. List,Set,Map之间的区别
- List:List在Java中有序,元素值可以重复,
- Set:Set可以存储唯一,无序的对象
- Map:存储键值对,多个key可以存储相同的值,但是key不能重复
2.ArrayList与LinkedList的区别
- ArrayList和LinkedList都是不同步的,也就是不保证线程安全
- ArrayList底层使用Object数组,LinkedList底层使用双向链表(jdk1.6之前是循环链表,1.7以后取消了循环)
- 插入和删除是否受到元素位置的影响:ArrayList采用数组存储,所以插入和删除元素时的时间复杂度受元素位置影响,LinkedList使用链表存储,所以,插入和删除元素时不受元素位置的影响,都是以O(1),而数组是O(n).
- 是否支持快速随机访问:LinkedList不支持快速随机访问,ArryList支持。
- 内存空间占用:ArraryList的空间浪费主要体现在在list的链表的结尾会预留空间,LinkedList空间体现在它的每一个元素需要比ArraryList更多的空间(因为要存放直接后继和直接前驱以及数据).
补充:
ArrayList 实现了 RandomAccess 接口, 而 LinkedList 没有实现 这是因为什么原因呢?觉得还是和底层数据结构有关!ArrayList 底层是数组,而 LinkedList 底层是链表。数组本身支持随机访问,时间复杂度为 O(1),所以称为快速随机访问。链表需要遍历到特定位置才能访问特定位置的元素,时间复杂度为 O(n),所以不支持快速随机访问。,ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。 RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机访问功能的.
3.ArraryList和vector的区别?为什么要用ArraryList代替Vector
Vector的所有方法都是同步的,可以多线程安全访问vector对象,但是如果单线程访问vector对象,会比较耗费时间。
ArraryList是不同步的,所以在不需要保证线程安全时使用它。
4.HashMap和HashTable的区别
- 线程是否安全:HashMap是非线程安全的,HashTable是线程安全的,HashTable内部的方法都经过synchronized修饰。
- HashMap的效率比HashTable要高,因为线程安全的问题。在代码中,尽量不要使用HashTable.
- HashMap中,null值可以作为键,这样的键只能有一个,可以有一个或多个键对应的值为null。但是在HashTable中只要有一个null,就抛出异常。
- 初始容量和扩充容量不同:①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。Ha