Java基础四:集合
1、说说List,Set,Map三者的区别?
(1)List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。
List的子类特点:
ArrayList:底层数据结构是数组,查询快,增删慢;
Vector:底层数据结构是数组,查询快,增删慢—线程安全,效率低;
Linkedlist:底层数据结构是链表,查询慢,增删快—线程不安全,效率高。
(2) Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。
(3) Map (⽤ Key 来搜索的专家): 使⽤键值对(kye-value)存储,Key 是⽆序的、不可重复的,value 是⽆序的、可重复的,每个键最多映射到⼀个值(multimap除外)。
2、Arraylist 与 LinkedList 区别?
(1) 是否保证线程安全: ArrayLis和LinkedLis都是不同步的,也就是不保证线程安全;
(2) 底层数据结构:Arraylist底层使⽤的是Object数组;LinkedList 底层使⽤的是双向链表数据结构
(3)插⼊和删除是否受元素位置的影响:① ArrayList采⽤数组存储,所以插⼊和删除元素的时间复杂度受元素位置的影响。 ②LinkedList 采⽤链表存储,所以对于add(E e)⽅法的插⼊,删除元素时间复杂度不受元素位置的影响
(4) 是否⽀持快速随机访问:LinkedList不⽀持⾼效的随机元素访问,⽽ ArrayList ⽀持。
(5) 内存空间占⽤:ArrayList的空间浪费主要体现在在list列表的结尾会预留⼀定的容量空间,⽽LinkedList 的空间花费则体现在它的每⼀个元素都需要消耗⽐ ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数据)
3、ArraysList和Vector及其扩容机制
(1)ArrayList 是 List 的主要实现类,底层使⽤ Object[ ] 存储,适⽤于频繁的查找⼯作,线程不安全 ;Vector 是 List 的古⽼实现类,底层使⽤ Object[ ] 存储,线程安全的。
(2)扩容机制:
ArrayList的默认初始容量为10,当然也可以自定义指定初始容量,随着动态的向其中添加元素,其容量可能会动态的增加,那么扩容的公式为:新容量 = 旧容量/2 + 旧容量;Vector的初始大小为10,如果没有指定每次增长的大小,则默认是翻倍增长。
部分内容来自网络,侵删。