• List知识总结


    ArrayList:

    1  ArrayList扩容底层用到的是;System.arraycopy.
    2  扩容的长度计算;int newCapacity = oldCapacity + (oldCapacity >> 1);,旧容量 + 旧容量右移1位,这相当于扩容为原
    来容量的(int)3/2.
    3  ArrayList<String> strings = new ArrayList<>(10);
    没有数据填充时进行插入数据,list.add(2,2);会抛异常IndexOutOfBoundsException
    
    • 1
    • 2
    • 3
    • 4
    • 5

    LinkedList:

      三种插入方式:
      LinkedList<String> strings1 = new LinkedList<>(Arrays.asList("1"));
      LinkedList<String> strings2 = new LinkedList<>(Collections.nCopies(10, "1"));
      LinkedList<String> strings3 = new LinkedList<String>() {
          {
               add("1");
               add("3");
           }
       };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    对比ArrayList和LinkedList:

    1 头插:ArrayList需要做大量的位移和复制操作,耗时更长
    2 尾插:ArrayList 尾插时,是不需要数据位移的,比较耗时的是数
    据的扩容时,数据超过百万的时候尾插法LinkedList耗时更长,主要在创建节点上.
    3 中间插入:Linkedlist在中间插入时,遍历寻找位置还是非常耗时了
      ArrayList可以使用copy-on-write技术来避免频繁的扩容和移动元素
    
    • 1
    • 2
    • 3
    • 4
    • 5

    List遍历5种方式:

    1 普通for循环
    2 增强for循环
       for (Integer itr : list) {
            xx += itr;
        }
    3 迭代器
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            xx += next;
        }
    4 foreach
      list.forEach(integer -> {
            xx += integer;
        });
    5  stream
       list.stream().forEach(integer -> {
            xx += integer;
        });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在集合的首位有大量的插入、删除以及获取操作,那么可以使用LinkedList,
    LinkedList的链表结构不一定会比ArrayList节省空间,首先它所占用的内存不是连续的,其次他还需要大量的实例化对象创造节点
    综合来看,如果需要频繁进行随机访问元素的操作,或者对内存占用要求较高,那么应选择ArrayList。如果需要频繁进行插入或删除元素的操作,或者不需要随机访问元素,那么应选择LinkedList。

  • 相关阅读:
    【ARFoundation学习笔记】射线检测
    [每日两题系列]刷算法题咯~~
    【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
    内核传输层的实现
    IMAU鸿蒙北向开发-2023年9月6日学习日志
    快递管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
    2022年编程语言排名,官方数据来了,让人大开眼界
    Redis十大数据类型
    【MySQL】索引的创建、查看和删除
    问题解析:Python中的变量复制备份,为什么没有达到效果?
  • 原文地址:https://blog.csdn.net/weixin_43076660/article/details/132818720