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

Java List集合

6 List集合

  • List系列集合:添加的元素是有序,可重复,有索引
    • ArrayList: 添加的元素是有序,可重复,有索引
    • LinkedList: 添加的元素是有序,可重复,有索引
    • Vector :是线程安全的,速度慢,开发中很少使用

6.1 List集合概述和特点

List集合概述
1、有序集合(也称为序列),用户可以精确控制列表中每个元索的插入位置。用户可以通过整数索引访问元素,并获取列表中的元素
2、与Set集合不同,List集合允许重复的元素

List集合特点
1、有序: 存储和取出的元素顺序一致
2、可重复: 存储的元素可以重复

package ceshi;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListDemo {public static void main(String[] args) {//创建集合对象List<String> list = new ArrayList<>();//添加元素list.add("java");list.add("天下");list.add("无敌");list.add("java");System.out.println(list); //[java, 天下, 无敌, java]//迭代器遍历Iterator<String> it = list.iterator();while(it.hasNext()) {String s = it.next();System.out.println(s);/*java天下无敌java*/}}
}

6.2 List集合的特有方法

方法名说明
public void add(int index,E element)该集合中的指定位置上插入元素
public E remove(int index)删除列表中指定位置的元素,返回被删除的元素
public E set(int index,E element)修改指定索引的元素,返回被修改的元素
public E get(int index)返回集合中指定位置的元素
package ceshi;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListDemo {public static void main(String[] args) {//创建集合对象List<String> list = new ArrayList<>();//添加元素list.add("java");list.add("天下");list.add("无敌");list.add("java");System.out.println(list); //[java, 天下, 无敌, java]//1、public void add(int index,E element) 	该集合中的指定位置上插入元素list.add(1,"javase");System.out.println(list); //[java, javase, 天下, 无敌, java]//2、public E remove(int index) 	删除列表中指定位置的元素,返回被删除的元素System.out.println(list.remove(1)); //javaseSystem.out.println(list); //[java, 天下, 无敌, java]//3、public E set(int index,E element) 	修改指定索引的元素,返回被修改的元素System.out.println(list.set(0,"java1")); //javaSystem.out.println(list); //[java1, 天下, 无敌, java]//4、public E get(int index) 	返回集合中指定位置的元素System.out.println(list.get(2)); //无敌//for循环遍历for(int i=0;i< list.size();i++) {//5,public E get(int index)	返回集合中指定位置的元素String s = list.get(i);System.out.println(s);/*java1天下无敌java*/}}
}
  • 案例
    在这里插入图片描述

  • 测试类

package ceshi;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListDemo {public static void main(String[] args) {//2、创建集合对象List<Student> list = new ArrayList<Student>();//3、创建学生对象Student s1 = new Student("y1",10);Student s2 = new Student("y2",20);Student s3 = new Student("y3",30);//4、学生对象添加到集合list.add(s1);list.add(s2);list.add(s3);//5、遍历集合:迭代器方法Iterator<Student> it = list.iterator();while(it.hasNext()) {Student s = it.next();System.out.println(s.getName()+","+s.getAge());/*y1,10y2,20y3,30*/}//5、遍历集合:for循环for(int i=0;i<list.size();i++) {Student ss = list.get(i);System.out.println(ss.getName()+","+ss.getAge());/*y1,10y2,20y3,30*/}}
}

6.3 ListIterator迭代器

  • Lstlterator:列表迭代器
    • 通过List集合的listterator()方法得到,所以说它是List集合特有的迭代器
    • 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
  • 常用方法
方法名说明
list.listIterator()得到 listIterator 迭代器
E next()返回迭代中的下一个元素
boolean hasNext()如果迭代具有更多元素,则返回true
E previous() [ˈpriːviəs]返回列表中的上一个元素
boolean hasPrevious()如果此列表迭代器在相反方向遍历列表时具有更多元索,则返回true
void add(E e)将指定的元索插入列表
package ceshi;import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class ListIteratorDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("java");list.add("python");list.add("scala");//通过list集合的listIterator() 方法得到迭代器/*ListIterator<String> lit = list.listIterator();while(lit.hasNext()) {String s = lit.next();System.out.println(s);*//*javapythonscala*//*}System.out.println("---------");//逆向遍历*//*E previous0 	返回列表中的上一个元素boolean hasPrevious() 	如果此列表迭代器在相反方向遍历列表时具有更多元索,则返回true*//*while(lit.hasPrevious()) {String s = lit.previous();System.out.println(s);*//*scalapythonjava*//*}*///获取列表迭代器ListIterator<String> lit = list.listIterator();while(lit.hasNext()) {String s = lit.next();if(s.equals("java")) {lit.add("world");}}System.out.println(list); //[java, world, python, scala]}
}

6.4 foreach(增强for循环)

增强for:简化数组和Collection集合的遍历

  • 实现Iterable接口的类允许其对象成为增强型 for语句的目标
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
  • 格式
for(元素类型  变量名: 数组名或collection集合){ }
//范例
int[] arr = {1,2,3,4,5};
for(int i : arr) {System.out.println(i);
}
  • 范例:
package ceshi;import java.util.ArrayList;
import java.util.List;public class ForDemo {public static void main(String[] args) {//int类型数组int[] arr = {1,2,3,4,5};for(int i : arr) {System.out.println(i);/*12345*/}//String类型数组String[] strArray = {"java","python","scala"};for(String s : strArray) {System.out.println(s);/*javapythonscala*/}//集合List<String> list = new ArrayList<>();list.add("y1");list.add("y2");list.add("y3");for(String lt:list) {System.out.println(lt);/*y1y2y3*/}//判断:内部原理是一个Iterator迭代器for(String s:list) {if(s.equals("y1")) {list.add("y4"); //ConcurrentModificationException:并发修改异常}}}
}

6.5 案例:List集合存储学生对象用三种方式遍历

在这里插入图片描述

  • 测试类
package ceshi;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListDemo {public static void main(String[] args) {List<Student> list = new ArrayList<>();Student s1 = new Student("y1",10);Student s2 = new Student("y2",20);Student s3 = new Student("y3",30);list.add(s1);list.add(s2);list.add(s3);//迭代器方式Iterator<Student> it = list.iterator();while(it.hasNext()) {Student s = it.next();System.out.println(s.getName()+","+s.getAge());}System.out.println("----------");//for带索引方式for(int i =0;i<list.size();i++) {Student s = list.get(i);System.out.println(s.getName()+","+s.getAge());}System.out.println("----------");//增强forfor(Student s: list) {System.out.println(s.getName()+","+s.getAge());}}
}

6.6 List集合子类特点

  • ArrayList:底层数据结构数组实现,查询快增删慢
  • LinkedList:底层数据结构链表实现,查询慢增删快
  • 范例:分别用ArrayList和LinkedList存储字符串并遍历
package ceshi;import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;public class ListDemo {public static void main(String[] args) {//1、创建ArrayList集合对象ArrayList<String> arraylist = new ArrayList<>();arraylist.add("java");arraylist.add("python");arraylist.add("scala");//增强forfor(String s: arraylist) {System.out.println(s);}System.out.println("-------");//普通for循环for(int i=0;i< arraylist.size();i++) {String s = arraylist.get(i);System.out.println(s);}System.out.println("-------");//迭代器的方式Iterator<String> it = arraylist.iterator();while(it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("-------");//2、创建LinkedList集合对象LinkedList<String> linkedList = new LinkedList<>();linkedList.add("a");linkedList.add("b");linkedList.add("c");//增强forfor(String s:linkedList) {System.out.println(s);}System.out.println("-------");//普通forfor(int i=0;i< linkedList.size();i++) {String s = linkedList.get(i);System.out.println(s);}System.out.println("-------");//迭代器Iterator<String> it1 = linkedList.iterator();while(it1.hasNext()) {String s = it1.next();System.out.println(s);}}
}

6.7 LinkedList集合特有方法

方法名说明
public void addFirst(E,e)在该列表开头插入指定的元素
public void addLast(E,e)将指定的元索追加到此列表的末尾
public E getFirst()返回此列表中的第一个元索
public E getLast()返回此列表中的最后一个元素
public E removeFirst从此列表中删除并返回第一个元素
public E removeLast从此列表中删除并返回最后一个元素
package ceshi;import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {//创建集合对象LinkedList<String> linkedList = new LinkedList<>();linkedList.add("java");linkedList.add("python");linkedList.add("scala");System.out.println(linkedList); //[java, python, scala]//1、public void addFirst(E,e) 	在该列表开头插入指定的元素linkedList.addFirst("1");System.out.println(linkedList); //[1, java, python, scala]//2、public void addLast(E,e) 	将指定的元索追加到此列表的末尾linkedList.addLast("5");System.out.println(linkedList); //[1, java, python, scala, 5]//3、public E getFirst() 	返回此列表中的第一个元索System.out.println(linkedList.getFirst()); //1//4、public E getLast() 	返回此列表中的最后一个元素System.out.println(linkedList.getLast()); //5//5、public E removeFirst 	从此列表中删除并返回第一个元素System.out.println(linkedList.removeFirst()); //1System.out.println(linkedList);//[java, python, scala, 5]//6、public E removeLast 	从此列表中删除并返回最后一个元素System.out.println(linkedList.removeLast()); //5System.out.println(linkedList); //[java, python, scala]}
}

相关文章:

Java List集合

6 List集合 List系列集合&#xff1a;添加的元素是有序&#xff0c;可重复&#xff0c;有索引 ArrayList: 添加的元素是有序&#xff0c;可重复&#xff0c;有索引LinkedList: 添加的元素是有序&#xff0c;可重复&#xff0c;有索引Vector &#xff1a;是线程安全的&#xff…...

linux服务器挂载硬盘/磁盘

1. 查看机器所挂硬盘个数及分区情况&#xff1a;fdisk -l可以看出来目前/dev/vda 目前有300G可用.内部有两个分区&#xff08;/dev/vda1,/dev/vda2&#xff09;。2. 格式化磁盘格式化磁盘命令为【mkfs.磁盘类型格式 目录路径组成】查看磁盘文件格式&#xff1a;df -T格式化磁盘…...

Java 抽象类

文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时&#xff0c;常常会为该类定义一些方法&#xff0c;用于描述该类的行为方式&#xff0c;这些方法都有具体的方法体。但在某些情况下&#xff0c;某个基类只是知道其子类应该包含那些方法&#xff0c;但不知道子类是如…...

OpenPPL PPQ量化(5):执行引擎 源码剖析

目录 PPQ Graph Executor(PPQ 执行引擎) PPQ Backend Functions(PPQ 算子库) PPQ Executor(PPQ 执行引擎) Quantize Delegate (量化代理函数) Usage (用法示例) Hook (执行钩子函数) 前面四篇博客其实就讲了下面两行代码&#xff1a; ppq_ir load_onnx_graph(onnx_impor…...

【脚本开发】运维人员必备技能图谱

脚本&#xff08;Script&#xff09;语言是一种动态的、解释性的语言&#xff0c;依据一定的格式编写的可执行文件&#xff0c;又称作宏或批处理文件。脚本语言具有小巧便捷、快速开发的特点&#xff1b;常见的脚本语言有Windows批处理脚本bat、Linux脚本语言shell以及python、…...

N字形变换-力扣6-java

一、题目描述将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a;P A H NA P L S I I GY I R之后&#xff0c;你的输出需要从左往右逐行读…...

概论_第5章_中心极限定理1__定理2(棣莫弗-拉普拉斯中心极限定理)

在概率论中&#xff0c; 把有关论证随机变量和的极限分布为正态分布的一类定理称为中心极限定理称为中心极限定理称为中心极限定理。 本文介绍独立同分布序列的中心极限定理。 一 独立同分布序列的中心极限定理 定理1 设X1,X2,...Xn,...X_1, X_2, ...X_n,...X1​,X2​,...Xn…...

详细解读503服务不可用的错误以及如何解决503服务不可用

文章目录1. 问题引言2. 什么是503服务不可用错误3 尝试解决问题3.1 重新加载页面3.2 检查该站点是否为其他人关闭3.3 重新启动设备3.3 联系网站4. 其他解决问的方法1. 问题引言 你以前遇到过错误503吗&#xff1f; 例如&#xff0c;您可能会收到消息&#xff0c;如503服务不可…...

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…...

数据库(三):多版本并发控制MVCC,行锁的衍生版本,记录锁,间隙锁, Next-Key锁(邻键锁)

文章目录前言一、MVCC以及MVCC的缺点1.1 MVCC可以为数据库解决什么问题1.2 MVCC的基本思想1.3 版本号1.4 Undo日志1.5 ReadView1.6 快照读和当前读1.6.1 快照读1.6.2 当前读二、记录锁三、间隙锁四、邻键锁总结前言 一、MVCC以及MVCC的缺点 MVCC&#xff0c;即多版本并发控制…...

c# 自定义隐式转换与运算符重载

用户定义的显式和隐式转换运算符 参考代码 用户定义的显式和隐式转换运算符 - 提供对不同类型的转换 | Microsoft Learn 代码例程 using System;public readonly struct Digit {private readonly byte digit;public Digit(byte digit){if (digit > 9){throw new Argumen…...

【MyBatis】| MyBatis的逆向⼯程

目录 一&#xff1a;MyBatis的逆向⼯程 1. 逆向⼯程配置与⽣成 2. 测试生成的逆向⼯程 一&#xff1a;MyBatis的逆向⼯程 &#xff08;1&#xff09;所谓的逆向⼯程是&#xff1a;根据数据库表逆向⽣成Java的pojo类&#xff0c;SqlMapper.xml⽂件&#xff0c;以及Mapper接⼝…...

Python|每日一练|哈希表|罗马数字|图算法|圆周率|单选记录:给定数列和|罗马数字转整数|计算圆周率

1、要求编写函数fn(a,n) 求aaaaaa⋯aa⋯aa(n个a&#xff09;之和&#xff0c;fn须返回的是数列和&#xff08;算法初阶&#xff09; 要求编写函数fn(a,n) 求aaaaaa⋯aa⋯aa(n个a&#xff09;之和&#xff0c;fn须返回的是数列和。 从控制台输入正整数a和n的值&#xff08;两…...

分布式之分布式事务V2

写在前面 本文一起来看下分布式环境下的事务问题&#xff0c;即我们经常听到的分布式事务问题。想要解决分布式事务问题&#xff0c;需要使用到分布式事务相关的协议&#xff0c;主要有2PC即两阶段提交协议&#xff0c;TCC&#xff08;try-confirm-cancel&#xff09;&#xf…...

算法笔记(二)—— 认识N(logN)的排序算法

递归行为的时间复杂度估算 整个递归过程是一棵多叉树&#xff0c;递归过程相当于利用栈做了一次后序遍历。 对于master公式&#xff0c;T(N)表明母问题的规模为N&#xff0c;T(N/b)表明每次子问题的规模&#xff0c;a为调用次数&#xff0c;加号后面表明&#xff0c;除去调用之…...

最长湍流子数组——滚动窗口,双指针,暴力求解

978. 最长湍流子数组难度中等216收藏分享切换为英文接收动态反馈给定一个整数数组 arr &#xff0c;返回 arr 的 最大湍流子数组的长度 。如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是 湍流子数组 。更正式地来说&#xff0c;当 arr 的子数组 A[i]…...

45.在ROS中实现global planner(1)

前文move_base介绍&#xff08;4&#xff09;简单介绍move_base的全局路径规划配置&#xff0c;接下来我们自己实现一个全局的路径规划 1. move_base规划配置 ROS1的move_base可以配置选取不同的global planner和local planner&#xff0c; 默认move_base.cpp#L70中可以看到是…...

Java中导入、导出Excel——HSSFWorkbook 使用

一、介绍 当前B/S模式已成为应用开发的主流&#xff0c;而在企业办公系统中&#xff0c;常常有客户这样子要求&#xff1a;你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是&#xff1a;我们已经习惯用Excel打印。这样在我们实际的开发中&#xff0c;很多时候需要…...

c#数据结构-列表

列表 数组可以管理大量数组&#xff0c;但缺点是无法更变容量。 创建小了不够用&#xff0c;创建大了浪费空间。 无法预测需要多少大小的时候&#xff0c;可能范围越大&#xff0c;就会浪费越多的空间。 所以&#xff0c;你可能会想要一种可以扩容的东西&#xff0c;代替数组…...

Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

文章目录1. Sa-Token 介绍2. 登录认证2.1 登录与注销2.2 会话查询2.3 Token 查询3. 权限认证3.1 获取当前账号权限码集合3.2 权限校验3.3 角色校验4. 前后台分离&#xff08;无Cookie模式&#xff09;5. Sa-Token 集成 Redis6. SpringBoot 集成 Sa-Token6.1 创建项目6.2 添加依…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...