类图
List:有序可重复集合
特点
1.元素允许重复
2.元素有序(元素的顺序就是插入时的顺序)
3.元素可以通过索引来访问或者设置
{
ArrayLIst:底层为数组,查询速度快,增删慢
LinkedList:底层是链表,查询速度慢,增删快
两者的优缺点,:效率高,线程不安全
}
Set:无序不可重复集合
HashSet:底层为数组,链表,红黑树,元素唯一性依靠重写hashcode()和equals()方法
TreeSet:底层为二叉树,元素唯一且已经排好序,唯一性依靠重写hashcode()和equals()方法
LinkedHashSet:继承HashSet,底层为链表和哈希表,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性
Map:保存具有映射关系的数据,键值对
HashMap:底层为数组,链表,红黑树,使用频率最高的处理键值对的数据类型,根据键的hashcode值存储数据,大多数情况下可以直接定位到它的值,最多允许一个key值为null,多个value值为null
TreeMap:底层为红黑树,实现了SoreMap接口,保存的记录根据键进行排序
LinkedHashMap:继承了HashMap,底层为数组,链表,红黑树,双向链表
面试问题
1.ArrayList与LinkedList异同
1.线程安全:都不同步,即都不保证线程安全
2.底层数据结构:ArrayList为数组,LinkedLIst为双向循环链表
3.元素位置对插入和删除的影响:ArrayList底层为数组,所以会受到元素位置影响。直接插入删除时,默认将该元素追加到数组末尾,时间复杂度为O(1),但要将元素在指定位置插入删除时(),时间复杂度为O(n-1)。LinkedLIst底层为链表,不受到元素位置影响,近似为O(1)。
4.是否支持快速随机访问:ArrayList实现了RandomAccess接口,所以支持快速访问,LinkedLIst不支持快速随机访问
5.内存空间占用:ArrayList对内存的浪费主要体现在末尾会预留一定的空间,LinkedList主要体现在每个元素都要比ArrayList占用更多空间(后继和前驱)。
2.ArrayLIst的扩容机制?
ArrayList是基于数组的集合,数组的容量是在定义的时候确定的,如果数组满了,再插入,就会数组溢出。所以在插入时候,会先检查是否需要扩容,如果当前容量+1超过数组长度,就会进行扩容。
ArrayList的扩容是创建一个1.5倍的新数组,然后把原数组的值拷贝过去。
标签:Java,框架,ArrayList,元素,链表,插入,数组,集合,底层 From: https://www.cnblogs.com/ywzh/p/17736985.html