Java学习笔记 List集合

本文深入探讨了Java中List接口的特点、API、遍历方式以及ArrayList和LinkedList的底层实现原理。ArrayList基于数组,查询快但增删慢,删除元素涉及数组复制;LinkedList基于双链表,适合首尾操作。此外,文章还介绍了并发修改异常及其处理方法,并警告了Array.asList()方法使用时的注意事项,如对原数组的影响和不支持某些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. List集合特点

1.有序,可重复,可索引
2.所有的方法围绕着这些特性提出,特别是可索引

2. List独有api

主要是围绕可索引这一特性提出

3. List的遍历方式

1.Collection集合的三种遍历方式:迭代器,foreach(增强for),lambda表达式
2.利用索引遍历,list.size()

4. List实现类的底层原理

4.1 ArrayList底层

基于数组实现,特点就是查询快,增删比较慢
最开始是一个大小为0的数组
第一次创建集合并添加首个元素是,创建一个默认大小为10的数组,size记录了当前元素个数,同时也是下一个插入位置

4.1.1 ArrayList的删

删除元素:删除是每次进行数组复制,然后让旧的elementData置为null进行垃圾回收

4.1.2 ArrayList的扩容

当插入元素超过数组大小,会调用grow函数来进行扩容到原来的1.5倍

4.2 LinkedList底层

基于双链表实现,特点是查询慢,对首尾元素操作很快,可以用来实现stackqueue

4.2.1 LinkedList独有的api

主要是对双链表头尾进行的操作
在这里插入图片描述

5. 并发修改异常

集合中找元素并删除时出现异常,即结构发生改变时发生的异常

5.1 使用迭代器遍历删除当前元素

如果删除操作使用list.remove(),会出现数组越界的风险
要用it.remove()即迭代器自己的方法

5.2 foreach遍历删除

不能用,会提示并发修改异常

5.3 使用for语句遍历删除元素

可以从下标大往小删除,或者每次下标自减

6. 使用Array.asList()时出现的一些小问题

  • 和原有的array绑定互相影响,当其中一个更新时,一个跟随更新
  • 不支持add()、remove()、clear()等方法;
  • 该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新;
  • 该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值