目录
List集合概述
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
与Set集合不同,列表通常允许重复的元素
List集合特点
有序:存储和取出的元素顺序一致可重复:存储的元素可以重复
- package zyy07;
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- List
l=new ArrayList(); - //添加元素
- l.add("zyy");
- l.add("and");
- l.add("jw");
- Iterator
i= l.iterator(); - while(i.hasNext()){
- String s=i.next();
- System.out.println(s);
- }
- }
- }

- package zyy07;
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- List
l=new ArrayList(); - //添加元素
- l.add("zyy");
- l.add("and");
- l.add("jw");
- //add在指定位置插入指定元素
- l.add(3,"and");
- System.out.println(l);
- //remove删除指定索引处元素,返回被删除元素
- System.out.println(l.remove(3));
- //set修改指定索引处元素,返回被修改的元素
- System.out.println(l.set(1,"is"));
- //get返回指定索引的元素
- System.out.println(l.get(2));
- System.out.println(l);
- //for循环输出
- for(int i=0;i
- System.out.println(l.get(i));
- }
- }
- }
2.3并发修改异常
并发修改异常
ConcurrentModificationException
产生原因
迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判新预期修改信和实际修改值不一致
解决方案
用for循环谝历,然后用集合对象做对应的操作即可
2.4 Listlterator
Listlterator:列表迭代器
通过List集合的listlterator0方法得到,所以说它是List集合特有的选代器
用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
Listlterator中的常用方法
Enext():返回迭代中的下一个元素
boolean hasNext():如果迭代具有更多元素,则返回true Eprevious):返回列表中的上一个元素
boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
void add(E e):将指定的元素插入列表
- package zyy07;
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- List
l=new ArrayList(); - //添加元素
- l.add("zyy");
- l.add("and");
- l.add("jw");
- //listIterator
- ListIterator
li=l.listIterator(); - while(li.hasNext()){
- System.out.println(li.next());
- }
- System.out.println("************");
- while(li.hasPrevious()){
- System.out.println(li.previous());
- }
-
- }
- }
2.5增强for循环
增强for:简化数组和Collection集合的遍历
实现lterable接口的类允许其对象成为增强型for语句的目标
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
增强for的格式
格式:
for(元素数据类型变量名:数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
范例:
int[]arr ={1,2,3,4,5}; for(int i:arr){
System.out.println(i);
}
- package zyy07;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class Demo {
- public static void main(String[] args) {
- int[] arr={1,2,3,4,5};
- for(int i:arr){
- System.out.println(i);
- }
- System.out.println("************");
- String[] str={"zyy","hwj","jwei"};
- for(String s:str){
- System.out.println(s);
- }
- System.out.println("*************");
- List
l=new ArrayList(); - l.add("zyy");
- l.add("and");
- l.add("jwei");
- for(String s: l){
- System.out.println(s);
- }
- //内部时Iterator迭代器
- for(String s: l){
- if(s.equals("zyy")){
- l.add("zy");
- //ConcurrentModificationException抛出了并发修改异常
- //说明它的内部是一个Iterator迭代器
- }
- }
-
- }
- }
2.6List集合子类特点
List集合常用子类:ArrayList,LinkedList
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
练习:分别使用ArrayList和LinkedList完成存储字符串并遍历
- package zyy07;
-
- import java.util.ArrayList;
- import java.util.LinkedList;
- import java.util.List;
-
- public class Demo {
- public static void main(String[] args) {
- ArrayList
a=new ArrayList<>(); - a.add("zyy");
- a.add("and");
- a.add("jw");
- for(String s: a){
- System.out.println(s);
- }
- LinkedList
l=new LinkedList<>(); - l.add("jw");
- l.add("and");
- l.add("zyy");
- for(String s:l){
- System.out.println(s);
- }
-
- }
- }
案例:ArrayList集合存储学生对象用三种方式遍历
需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路:
定义学生类
创建ArrayList集合对象
创建学生对象
把学生添加到集合
遍历集合
迭代器:集合特有的遍历方式
普通for:带有索引的遍历方式
增强for:最方便的遍历方式
学生类:
- package com.test;
-
- public class student {
- //成员变量
- private String name;
- private int age;
-
- //构造方法
- public student(){
- }
- public student(String name,int age){
- this.name=name;
- this.age=age;
- }
-
- //成员方法
- public void setName(String name){
- this.name=name;
- }
- public String getName(){
- return name;
- }
- public void setAge(int age){
- this.age=age;
- }
- public int getAge(){
- return age;
- }
-
- }
- }
测试类:
- package com.test;
-
- import java.util.ArrayList;
- import java.util.Iterator;
-
- public class studentdemo {
- public static void main(String[] args) {
- //创建对象
- ArrayList
a=new ArrayList<>(); - //创建学生对象
- student s1=new student("zyy",14);
- student s2=new student("jwei",18);
- student s3=new student("hwj",14);
- //把学生添加到集合
- a.add(s1);
- a.add(s2);
- a.add(s3);
- //迭代器
- Iterator
i=a.iterator(); - while(i.hasNext()){
- student s=i.next();
- System.out.println(s.getName()+","+s.getAge());
- }
- System.out.println("***********");
- //普通for
- for(int j=0;j
- student s=a.get(j);
- System.out.println(s.getName()+","+s.getAge());
- }
- System.out.println("*************");
- //增强for
- for(student s: a){
- System.out.println(s.getName()+","+s.getAge());
- }
- }
- }
2.7LinkedList集合的特有功能

- package zyy07;
-
- import java.util.LinkedList;
-
- public class Demo {
- public static void main(String[] args) {
- LinkedList
l=new LinkedList<>(); - l.add("jw");
- l.add("and");
- l.add("zyy");
- l.addFirst("i");
- l.addLast("you");
- System.out.println(l.getFirst());
- System.out.println(l.getLast());
- System.out.println(l.removeFirst());
- System.out.println(l.removeLast());
- }
- }
-
相关阅读:
技术大佬们都是怎么学习的?
tcp三次握手的一些疑问
Linux 系统添加虚拟内存的方法
软件构造 | Equality in ADT and OOP
ChinaSkills全国职业院校技能大赛Debian样题六||本专栏基于此试题,订阅前必读!!!
「引流工具」火炬多平台多功能引流高效推广脚本,抖音+快手+小红书多平台自动引流软件
第八章 防火墙技术与原理运用
JS,BOM试题,在实践中应用,非常详细!!
CJC8988带2个立体声耳机驱动器的低功率立体声编解码器
超级累的 win11,蓝屏,用户不存在要注消,程序图标异常,重装系统
-
原文地址:https://blog.csdn.net/qq_62799214/article/details/126175545