文章目录
前言
提示之前总结了面写对象和字符传,我们继续聊聊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之间的区别
ArrayList | LinkedList | Vector | |
---|---|---|---|
底层数据结构 | 数组 | 链表 | 数组 |
默认值 | 10 | 无 | 10 |
线程安全 | 不安全 | 不安全 | 安全 |
随机访问 | 支持 | 不支持 | 支持 |
操作效率 | 查询快,增删慢 | 查询慢,增删快 | 查询快,增删慢 |
使用场景 | 使用大量查询的场景 | 适用于经常插入、删除大量数据的场合 | 适用于小量高并发的场景 |
ArrayList 和 LinkedList 读写快慢的本质
ArrayList : 查询数据快,是因为数组可以通过下标直接找到元素。 写数据慢有两个原因:一是数组复制过程需要时间,二是扩容需要实例化新数组也需要时间。
LinkedList : 查询数据慢,是因为链表需要遍历每个元素直到找到为止。 写数据快有一个原因:除了实例化对象需要时间外,只需要修改指针即可完成添加和删除元素。
注:这里的块和慢是相对的。并不是LinkedList的插入和删除就一定比ArrayList快。明白其快慢的本质:ArrayList快在定位,慢在数组复制。LinkedList慢在定位,快在指针修改。
总结
冲冲冲