• Java中的List


    List

    扩容规则:

    1.ArrayList初始化大小为10,扩容规则:扩容后的大小= 原始大小*1.5。

    2.linkList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好。

    3.HashMap初始化大小为16,扩容因子默认为0.75(可以指定初始化大小和扩容因子的)HashMap 的容量必须是2的N次方,HashMap 会根据我们传入的容量计算一个大于等于该容量的最小的2的N次方,例如传new HashMap<>(9); 容量大小为16。

    扩容机制.(当前大小 和 当前容量 的比例超过了 扩容因子,就会扩容,扩容后大小为 一倍。例如:初始大小为 16 ,扩容因子 0.75 ,当容量为12的时候,比例已经是0.75 。触发扩容,扩容后的大小为 32.)

    List的接口有三个实现类。

    1.ArrayList

    ArrayList是一种基于数组的有序列表,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素,非线程安全。
    ArrayList初始化大小为10,扩容规则:扩容后的大小= 原始大小*1.5。

    创建方法:ArrayList objectName =new ArrayList<>();
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全(一般不考虑到线程的安全因素,用Arraylist效率比较高)

    2.LinkedList

    LinkedList是一种基于数据结构的双向链表,除了首节点与尾节点每个节点有三个值(上个节点的地址、值、下一个结点的地址)
    LinkList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好。
    它是一个队列,可以当双端队列来使用
    它是一个集合,可以根据索引随机访问集合中的元素,还实现了Deque接口
    LinedList是一个List集合,它的实现方式和ArrayList是完全不同的,ArrayList的底层是通过一个动态的Object[]数组实现的,而LinkedList的底层是通过链表来实现的,因此它的随机访问速度是比较差的,但是它的删除,插入操作很快。
    LinkedList是基于双向循环链表实现的,除了可以当作链表操作外,它还可以当作栈、队列和双端队列来使用。
    LinkedList同样是非线程安全的,只在单线程下适合使用。

    创建方法:LinkedList list = new LinkedList();
    优点: 底层数据结构是链表,增删快,查询慢。
    缺点: 线程不安全。

    3.Vector

    Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
    Vector 是同步访问的。
    Vector 包含了许多传统的方法,这些方法不属于集合框架。
    有序的,可以存储重复值和null值。底层是数组实现的,线程安全。结构与ArrayList非常相似,同样是一个线性的动态可扩容数组。初始容量是10,没有设置扩容增量的情况下以自身的2倍容量扩容,可以设置容量增量,初始容量和扩容量可以通过构造函数public Vector(int initialCapacity, int capacityIncrement)进行初始化。
    Vector 类支持 4 种构造方法。
    第一种构造方法创建一个默认的向量,默认大小为 10:
    Vector()
    第二种构造方法创建指定大小的向量。
    Vector(int size)
    第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。
    Vector(int size,int incr)
    第四种构造方法创建一个包含集合 c 元素的向量:
    Vector(Collection c)
    优点: 底层数据结构是数组,查询快,增删慢。线程安全。
    缺点: 效率低。

    借鉴多篇博客
    原文链接:https://blog.csdn.net/weixin_45706529/article/details/125384857
    原文链接:https://www.runoob.com/java/java-vector-class.html
    原文链接:https://blog.csdn.net/he_zhen_/article/details/87020557
    原文链接:https://blog.csdn.net/weixin_45706529/article/details/125384857

  • 相关阅读:
    vue预览下载PDF文件
    终端导出mysql 下载
    java计算机毕业设计中美医院病历管理系统源程序+mysql+系统+lw文档+远程调试
    Macleod薄膜专题设计中高级课程
    5、Redis的发布和订阅
    20.添加HTTP模块
    R语言和office(Word,excel,PPT)交互
    Springboot游戏道具在线交易平台毕业设计源码171956
    C#访问修饰符
    智慧农业新篇章:拓世法宝AI智能直播一体机助力乡村振兴与农业可持续发展
  • 原文地址:https://blog.csdn.net/qq_45720234/article/details/126580580