Java集合 | List与Set

集合示意图

List 集合

List 是一个接口 他继承与Collection的接口;有序可重复的集合
实现List 的对象有 ArrayList 、LinkedList 和 Vector

ArrayList

ArrayList 底层是用数组实现的,有下标 查询快增删慢,在每次进行增删操作时都会移动元素;线程异步,非线程安全的集合。
底层操作:在new ArrayList() 的时候 源码中是 将 elementData 属性赋值一个长度为0的一个数组{} 在add 操作的时候进行扩容 首次扩容长度为 10的一个集合,在之后add过程总
add()->ensureCapacityInternal()->ensureExplicitCapacity()> grow()
所以 扩容的操作是在 grow()方法中 当当前长度+1 > 数组长度时触发这个方法, Array.copy 将数据copy到一个1.5倍的数组中

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

LinkedList

LinkedList 底层是双向链表,对增删操作快,查询操作慢;LinkedList 每次进行增删操作都不需要进行移动元素,只需要更改节点指针即可; 可作为堆栈,对了列 双向队列使用。

Vector

Vector底层是动态数组实现的与ArraList是一样的 只不过Vector是线程同步的,线程安全的;由于Vector使用了synchronized修饰方法 所有效率是低于ArrayList的。

Set 集合 -(无序不重复的集合)

Set 也是一个接口 他继承了Collection接口,是无序不重复的集合;
实现Set 的类有 HashSetLinkedHashSetTreeSet

HashSet

HashSet 底层是HashMap实现的也可以说底层是hash表实现的 无序不重复的可以为存null,非线程安全的; HashSet判断两个对象是否相同是通过hashCode()方法与equals()方法来判断的

LinkedHashSet

LinkedHashSet 通过继承HashSet,底层使用LinkedHashMap, 底层是由一个Hash表与双链表实现的 双链表是用来记录数据插入的顺序的; 有序不重复的集合

TreeSet

TreeSet底层是基于TreeMap的,将加入的元素作为TreeMap的key,使用一个常量类来作为公共的value; 通过比较器或者自然排序来对元素进行排序的, 元素不重复的集合, 默认不可存入null,可自定义比较器来实现null的存储;

List 与Set 的区别

\List 是有序可重复的集合,Set 是无序不重复的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一介草民丶

谢谢老板的一分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值