面试之Java圣经3

文章目录


前言

提示之前总结了面写对象和字符传,我们继续聊聊Collection下的List和Set,Map作为一个单独的集合具体来讲在下一篇。

先看一下继承图

一、Set

        Set集合不允许包含相同的元素,它只能有一个null值,且是无序的(即存储的顺序和取出的顺序),HashSet是Set常用接口,底层实现是基于HashMap,它也和Set一样是无序的。按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。

二、List

        List是代表着有序(这里的有序指的是按照放入的顺序进行存储。如按照顺序把1,2,3存入List,那么,从List中遍历出来的顺序也是1,2,3)且允许重复的队列。

       ArrayList、 LinkedList 和 Vector之间的区别

        

 ArrayListLinkedListVector
底层数据结构数组链表数组
默认值1010
线程安全不安全不安全安全
随机访问支持不支持支持
操作效率查询快,增删慢查询慢,增删快查询快,增删慢
使用场景使用大量查询的场景适用于经常插入、删除大量数据的场合适用于小量高并发的场景

ArrayList 和 LinkedList 读写快慢的本质

        ArrayList : 查询数据快,是因为数组可以通过下标直接找到元素。 写数据慢有两个原因:一是数组复制过程需要时间,二是扩容需要实例化新数组也需要时间。
        LinkedList : 查询数据慢,是因为链表需要遍历每个元素直到找到为止。 写数据快有一个原因:除了实例化对象需要时间外,只需要修改指针即可完成添加和删除元素。

        :这里的块和慢是相对的。并不是LinkedList的插入和删除就一定比ArrayList快。明白其快慢的本质:ArrayList快在定位,慢在数组复制。LinkedList慢在定位,快在指针修改


总结

冲冲冲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值