ArrayList,LinkedList,HashMap,HashSet,vactor之间的区别与联系这些在面试中经常会被问到,现在整理一下,方便以后查询。
要说这些东西,就必须先提一下这些东西总体上的划分:
ArrayList,LinkedList是实现了List接口,而List接口有继承了Collection接口。
vactor也是实现了List接口。
HashSet是实现了Set接口,Set接口继承了Collection接口。
HashMap是实现了Map接口。
所以,总体上ArrayList,LinkedList,vactor属于List类的集合,HashSet属于Set类的集合,他们同属于集合,而HashMap实现的是Map接口,所以它虽然属于集合,但Map和Collection是两个不同的接口。
下面来说一下他们之间的差别。
LinkedList
LinkedList是以链表存放,类中有一个内部类,这个内部类是一个小的集合Node,他里面只能放三个元素,即当前下标,之前和之后所对应的元素。集合的添加,删除,查找都是靠这个类来实现的,它相当于游标卡尺的指针。这个类在添加,删除元素时,直接通过Node判断判断链表的头和尾,在链表的两端段进行操作。在随机访问集合时,需要遍历链表的下标,找到所在位置,获取值。在空间上它的每一个元素都需要消耗相当的空间,所以LinkedList在添加删除是效率先对其他较高,访问时较低。
ArrayList
ArrayList是以数组形式存放,相当于一个动态数组,初始大小是10,当要扩容时,会先创建一个大1.5倍的数组(newCapacity = oldCapacity + (oldCapacity >> 1)),然后复制过去。所以它在list列表的结尾会预留一定的容量空间,造成一定的空间浪费。数组相对来说在添加或者删除一个元素时,当前的列表所所有的元素都会被移动,效率较慢,但在访问时,效率较高。
vactor
vactor底层的数据结构也是数组存放,除了在线程安全问题上相对于ArrayList更安全,其余几乎一样,他在添加,访问过程中添加了同步锁,线程更安全。
HashSet
HashSet实现
ArrayList,LinkedList,HashMap,HashSet,vactor区别整理
最新推荐文章于 2023-08-09 15:25:22 发布
