文章目录

  • List集合
    • 1. List集合
      • 1.1 List集合特征
      • 1.2 List常用方法
    • 2. ArrayList 可变长数组 【重点】
      • 2.1 ArrayList特征
      • 2.2 增删慢
      • 2.3 查询快
        • 2.3.1 【补充知识点 内存地址】
        • 2.3.2 【补充知识点 null到底是个啥】
        • 2.3.3 【补充知识点 数组内存地址图】
        • 2.3.4 查询快的原因
      • 2.4 ArrayList源代码实现
    • 3. LinkedList 双向链表结构
      • 3.1 双向链表结构示意图
      • 3.2 链表结构方法

List集合

1. List集合

1.1 List集合特征
特征:有序,可重复
有序:添加顺序和存储顺序一致
可重复:List集合中允许出现相同元素。List
--| ArrayList 可变长数组
--| LinkedList 双向链表
--| Vector 线程安全的可变长数组
1.2 List常用方法
增boolean add(E e);在集合末尾添加指定类型的元素对象boolean addAll(Collection<? extends E> e);在集合末尾添加另一个集合对象,要求参数集合中的元素是E类型本身或者E类型的子类,泛型的【上限】boolean add(int index, E e);在集合中指定下标位置添加指定E类型元素boolean addAll(int index, Collection<? extends E> e);在集合中指定下标位置添加另一个集合对象,要求参数集合中的元素是E类型本身或者E类型的子类,泛型的【上限】删remove(Object obj);删除指定元素removeAll(Collection<?> c);删除两个集合的交集retainAll(Collection<?> c);保留两个集合的交集clear();清空整个集合E remove(int index);删除指定下标的元素,返回值是被删除元素
改E set(int index, E e);使用指定元素替换指定下标元素,返回值类型是被替换的元素。
查int size();获取有效元素个数boolean isEmpty();判断当前集合是否为空boolean contains(Object obj);判断指定元素是否在集合中存在boolean containsAll(Collection<?> c);判断参数集合是不是当前集合的子集合Object[] toArray();集合中的所有元素全部转换成Object类型数组返回E get(int index);获取指定下标的元素int indexOf(Object obj);获取指定元素的下标位置int lastIndexOf(Object obj);获取指定元素最后一次出现的下标位置List<E> subList(int fromIndex, int toIndex);截取子List集合对象,要求从fromIndex开始操作,到toIndex截止,并且是要头不要尾 fromIndex <= n < toIndex

2. ArrayList 可变长数组 【重点】

2.1 ArrayList特征
1. ArrayList是一个可变长数组形式的数据存储方式。底层保存数据的是一个Object类型数组。该数组在调用无参数构造方法时,默认容量 private static final int DEFAULT_CAPACITY = 10;如果调用有参数构造方法,在合理范围以内按照用户指定的容量创建对应的底层数组2. ArrayList因为底层存储数据的结构是一个Object类型数组查询快增删慢3. ArrayList常用方法都是List接口对应方法。trimToSize();缩容方法ensureCapacity(int capacity);确认容量方法grow(int minCapacity);扩容方法rangeCheck(int index);下标范围验证方法
2.2 增删慢
增:1. 在指定位置添加元素,会导致从指定位置开始,之后的元素整体向后移动,移动过程【浪费时间】2. 如果底层数组容量不足,需要进行grow扩容操作,扩容操作过程中,需要进行数据的复制转移,该过程非常【浪费时间】3. 如果同时发生以上两种情况,蹦沙卡拉卡...删:1. 删除指定下标的元素,会导致从指定位置开始,之后的元素整体向前移动,该过程非常【浪费时间】2. 删除数据过多的情况下,会导致空间浪费,会选择【时间换空间】
2.3 查询快
2.3.1 【补充知识点 内存地址】
内存地址:从内存第一个字节开始,到内存的最大内容。按照内存最小单位【字节】从0编号到最大值内存。每一个字节都有一个唯一编号!!!内存地址:32GB内存对于计算机所有的内存地址编号0x0 ~ 0x 7 FFFF FFFF生活中的地址:航海中路60号黄河路60号对于快递员可以明确的送到快递如果存在一个内存地址,CPU可以通过该地址直达目标!!!【效率极高!!!】
2.3.2 【补充知识点 null到底是个啥】
null 是内存编号为0x0内存,也就是整个计算机中第一个内存。0x0 null 不能读,不能写是收到系统保护的!!!只要存在任何一个程序读取或者写入数据到0x0 null直接杀死!!!Kill -9null不得调用任何的一个方法!!!
2.3.3 【补充知识点 数组内存地址图】

2.3.4 查询快的原因
1. ArrayList底层存储数据的是一个Object类型数组。需要通过下标方式获取对应的元素,这里可以计算对应下标元素的内存地址,直接跳转操作,效率较高2. ArrayList是一个连续空间存储。
2.4 ArrayList源代码实现
增boolean add(E e);在集合末尾添加指定类型的元素对象boolean add(int index, E e);在集合中指定下标位置添加指定E类型元素删remove(Object obj);删除指定元素clear();清空整个集合E remove(int index);删除指定下标的元素,返回值是被删除元素
改E set(int index, E e);使用指定元素替换指定下标元素,返回值类型是被替换的元素。
查int size();获取有效元素个数boolean isEmpty();判断当前集合是否为空boolean contains(Object obj);判断指定元素是否在集合中存在Object[] toArray();集合中的所有元素全部转换成Object类型数组返回E get(int index);获取指定下标的元素int indexOf(Object obj);获取指定元素的下标位置int lastIndexOf(Object obj);获取指定元素最后一次出现的下标位置MyList<E> subList(int fromIndex, int toIndex);截取子List集合对象,要求从fromIndex开始操作,到toIndex截止,并且是要头不要尾 fromIndex <= n < toIndex

3. LinkedList 双向链表结构

3.1 双向链表结构示意图

3.2 链表结构方法
boolean addFirst(E e);添加元素到链表开头
boolean addLast(E e);添加元素到链表末尾 ==> add(E e);
E getFirst();获取链表头元素
E getLast();获取链表尾元素
E removeFirst();删除链表头元素
E removeLast();删除链表尾元素完成:1. 堆栈结构getLast removeLast addLast2. 队列结构getFirst removeFirst addLast

【java初学】List集合相关推荐

  1. java基础之集合篇

    1.概述 1.1.什么是集合?有什么用? 数组其实就是一个集合.集合实际上就是一个容器.可以来容纳其它类型的数据.集合为什么说在开发中使用较多?集合是一个容器,是一个载体,可以一次容纳多个对象.在实际 ...

  2. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

  3. java去重复的集合_如何去除Java中List集合中的重复数据

    1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...

  4. Java中Set集合是如何实现添加元素保证不重复的?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「武培轩」 Java中Set集合是如何实 ...

  5. Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  6. Java的数组集合概括

    Java的数组集合概括 Collection 1.List(存储有序,有索引,可以重复) 1.1.ArrayList 底层是数组实现的,线程不安全,查找和修改快,增删比较慢 1.2.LinkedLis ...

  7. Java对象容器——集合Set

    集合就是数学中的集合的概念:所有的元素都具有唯一的值,元素在其中没有顺序. 数学中的集合具有唯一性(没有重复元素),Java中的集合也是. 比如放三个值1,1,1输出这个集合的话只会输出一个1. Ha ...

  8. Set精讲(Java)·算法常用集合处理方法

    Set精讲(Java)·算法常用集合处理方法 Set概述 Set集合类似于一个罐子,程序可以依次把多个对象"丢进"Set集合,而Set集合通常不能记住元素的添加顺序.实际上Set就 ...

  9. 万字长文深入理解java中的集合-附PDF下载

    文章目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fai ...

  10. java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?

    java中关于集合的内容也是十分丰富的,而且相关的知识点也是十分多的.多线程集合所涵盖的范围是十分广阔的.今天就来为大家介绍一下,java多线程同步集合是什么以及并发集合是什么?一起来看看吧. 首先我 ...

最新文章

  1. 人工智能及其应用(第5版).蔡自兴-3章课后习题。【参考答案】
  2. C++中的模板template
  3. linux/windows下安装scala
  4. 怎么卸载Apache_pn服务-PHPnow使用问题
  5. 中国数据备份一体机产业未来供需状况及投资潜力价值报告2021年版
  6. Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
  7. linux的sed命令是什么,linux sed命令
  8. php强制对齐,[强迫症福利] 使用 PHPStorm 对齐数组的键值对
  9. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测
  10. java easing_p5.js入门教程之平滑过渡(Easing)
  11. 十几个NPM恶意包劫持 Discord 服务器
  12. 今天来黑一黑Intel的傲腾
  13. LTE下行物理层传输机制(9)-集中式和分布式资源映射
  14. sublime text 3211 安装中文包
  15. 解决IE兼容H5的问题
  16. iPhone13有3D Touch吗 3D Touch有什么用
  17. matlab计算程序运行时间
  18. VC 格式化代码快捷键
  19. 【MyBatis】搭建MyBatis
  20. 视频编解码-----理论基础(3)

热门文章

  1. 【Java】JUC(java.util.concurrent)工具包中的并发相关
  2. Pytorch高效降低内存 torch.utils.checkpoint()的使用
  3. 深圳市有关事假、病假、婚假、丧假、产假、哺乳假、生育看护假的规定
  4. 4、JSX 基本语法规则
  5. 史上公认的最好学习方法, 学英语者的福利
  6. Ner-Ocr识别文本格式化问题
  7. 如何解决终端连接数超过最大连接数
  8. C#面向对象Chatbot智能版
  9. 无需代码即可训练和可视化口罩检测模型
  10. Codeforces gym101981 (2018 icpc 南京站) B.Tournament