Java集合框架(部分)

类图

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倍的新数组,然后把原数组的值拷贝过去。

 

 

 

 

 

posted @   因为在乎  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示