List知识总结

ArrayList:

java 复制代码
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

LinkedList:

java 复制代码
  三种插入方式:
  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");
       }
   };

对比ArrayList和LinkedList:

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

List遍历5种方式:

java 复制代码
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;
    });

在集合的首位有大量的插入、删除以及获取操作,那么可以使用LinkedList,

LinkedList的链表结构不一定会比ArrayList节省空间,首先它所占用的内存不是连续的,其次他还需要大量的实例化对象创造节点

综合来看,如果需要频繁进行随机访问元素的操作,或者对内存占用要求较高,那么应选择ArrayList。如果需要频繁进行插入或删除元素的操作,或者不需要随机访问元素,那么应选择LinkedList。

相关推荐
小oo呆2 分钟前
【学习心得】Python好库推荐——pipx
linux·开发语言·python
smile_Iris4 分钟前
Day 28 元组和OS模块
python·机器学习
AI科技星19 分钟前
时空运动的几何约束:张祥前统一场论中圆柱螺旋运动光速不变性的严格数学证明与物理诠释
服务器·数据结构·人工智能·python·科技·算法·生活
AIsdhuang25 分钟前
2025 AI培训权威榜:深度评测与趋势前瞻
人工智能·python·物联网
m0_7269659828 分钟前
RAG小实战
开发语言·python
只与明月听32 分钟前
FastAPI入门实战
前端·后端·python
无心水43 分钟前
【Python实战进阶】12、Python面向对象编程实战:从零构建搜索引擎,掌握封装、继承与多态!
开发语言·python·搜索引擎·python进阶·python面向对象·搜索引擎实战·封装继承多态
mortimer43 分钟前
Python + FFmpeg 视频自动化处理指南:从硬件加速到精确剪辑
python·ffmpeg·音视频开发
帅得不敢出门1 小时前
Android8 Framework实现Ntp服务器多域名轮询同步时间
android·java·服务器·python·framework·github
haiyu_y1 小时前
Day 29 异常处理
python