Java集合框架(部分)
特点
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不支持快速随机访问
2.ArrayLIst的扩容机制?
ArrayList是基于数组的集合,数组的容量是在定义的时候确定的,如果数组满了,再插入,就会数组溢出。所以在插入时候,会先检查是否需要扩容,如果当前容量+1超过数组长度,就会进行扩容。
ArrayList的扩容是创建一个1.5倍的新数组,然后把原数组的值拷贝过去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通