当前位置: 首页 > news >正文

Java—— 集合 List

List集合的特点

有序:存和取的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复

List集合的方法

Collection的方法List都继承了,可以使用Collection中的方法
此外,List集合因为有索引,所以多了很多索引操作的方法。

方法名称说明
void add (int index,E element)在此集合中的指定位置插入指定的元素
E remove (int index)删除指定索引处的元素,返回被删除的元素
E set (int index,E element)修改指定索引处的元素,返回被修改的元素
E get (int index)返回指定索引处的元素

注意:

List集合中的上述方法存在重载现象,一个是继承Collection的需要提供的参数是给定的具体对象,另一个是List自己的需要提供的参数是索引,所以出现以下问题。

例如:remove(1),到底是删除泛型是<Integer>集合中的元素1,还是删除1索引上的元素

答:优先调用形参和实参类型一致的方法 

代码演示:

import java.util.ArrayList;
import java.util.List;public class Test5 {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);//[1, 2, 3]//1是int类型,所以调用形参是int类型的删除指定索引处的元素list.remove(1);System.out.println(list);//[1, 3]//将1变为Integer类型Integer i = Integer.valueOf(1);//i变量中的1是引用数据类型,所以调用形参是Object类型的删除指定元素list.remove(i);System.out.println(list);//[3]}
}

List集合的遍历方式

除了与Collection相同的迭代器遍历,增强for遍历,lambda遍历外,还有普通for遍历,列表迭代器遍历。

普通for遍历

代码演示

public class Test6 {public static void main(String[] args) {//普通for遍历List<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");for (int i = 0; i < list.size(); i++) {String str = list.get(i);System.out.println(str);}//aaa//bbb//ccc}
}

列表迭代器遍历

说明

列表迭代器ListIterator继承自迭代器Iterator,

获取列表迭代器
方法名称说明
ListIterator<E> listIterator ()

返回迭代器对象默认指向当前集合的0索引

常用方法 
方法名说明
boolean hasNext ()

正向遍历列表

判断当前位置是否有元素,

有元素返回true,没有元素返回false

E next ()获取当前位置的元素
并将迭代器对象移向下一个位置。
boolean hasPrevious ()

逆向遍历列表

判断当前位置是否有元素,

有元素返回true,没有元素返回false(了解)

E previous ()获取当前位置的元素
并将迭代器对象移向上一个位置。(了解)
vold add (E e)将指定的元素插入列表
void remove ()删除获取到的元素
代码演示
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class Test6 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");//遍历打印ListIterator<String> lit1 = list.listIterator();while (lit1.hasNext()) {String str = lit1.next();System.out.println(str);}//aaa//bbb//ccc//遍历添加:在aaa的后面添加dddListIterator<String> lit2 = list.listIterator();while (lit2.hasNext()) {String s = lit2.next();if (s.equals("aaa")) {lit2.add("ddd");}}System.out.println(list);//[aaa, ddd, bbb, ccc]}
}

ArrayList集合底层原理

 底层数据结构是数组,查询快,增删慢

1.利用空参创建的集合,在底层创建一个默认长度为0的数组
2.添加第一个元素时,底层会创建一个新的长度为10的数组
3.存满时,会扩容1.5倍
4.如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

LinkedList集合底层原理

底层数据结构是双向链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的
因此LinkedList本身多了很多直接操作首尾元素的特有API,所以除了继承自Collection和List中的方法,还有以下方法

特有方法说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素
http://www.xdnf.cn/news/370099.html

相关文章:

  • 程序代码篇---Python视频流
  • JSON|cJSON 介绍以及具体项目编写
  • STM32CUBEIDE开发实战:ADC与UART应用
  • 网络原理(Java)
  • 使用python脚本连接SQL Server数据库导出表结构
  • 解决虚拟机挂起之后的网络问题
  • 鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK
  • 单片机-STM32部分:11、ADC
  • MCP项目实例 - client sever交互
  • Python+OpenCV打造AR/VR基础框架:从原理到实战的全链路解析
  • Kotlin高阶函数多态场景条件判断与子逻辑
  • Android 13 默认打开 使用屏幕键盘
  • macOS 15.4.1 Chrome不能访问本地网络
  • 深入解析C++11 auto 关键字:类型推导的现代实践
  • 青藏高原七大河流源区径流深、蒸散发数据集(TPRED)
  • PCB设计实践(十二)PCB设计电容选型:功能、材质、规则
  • C++发起Https连接请求
  • 两个数组的交集(暴力、set、哈希)
  • 【小沐学GIS】基于C++绘制二维瓦片地图2D Map(QT、OpenGL、GIS)
  • 二、Hive安装部署详细过程
  • USR-M100采集数据并提交MQTT服务器
  • 为什么tcp不能两次握手
  • 基于C语言的TCP通信测试程序开发指南
  • openstack的网络和vpc网络底层原理有什么区别与联系
  • 人工智能行为分析驱动的反爬虫技术:给用户行为 “画像”
  • VBA将PDF文档内容逐行写入Excel
  • SpringBoot框架名字的由来
  • CentOS 7 修改锁屏时间为永不
  • arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • 数据库中的 Segment、Extent、Page、Row 详解