java-单列集合List详解

一、List概述

​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象,它们共享 Collection 接口中定义的所有方法。

List集合的特点:

1、有序:存和取得元素顺序一致

2、有索引:可以通过索引操作元素

3、可重复:存储的元素可以重复

二、List的方法

Collection接口的方法List都继承了,在此基础上List还增加了索引操作的方法

List独有的方法:

它的特有方法都与索引有关

1、增加元素

语法1:集合名称.add(元素);

在集合的末尾添加元素

语法2:集合名称.add(索引,元素);    特有方法

在指定索引添加元素原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素

import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素// 通用方法l.add("aaa");l.add("bbb");l.add("ccc");System.out.println(l);// [aaa, bbb, ccc]// 特有方法// 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素l.add(1,"在索引1处添加元素");System.out.println(l);// [aaa, 在索引1处添加元素, bbb, ccc]}
}

2、删除元素

语法1:集合名称.remove(元素);

根据元素删除,如果存在则删除成功,返回值为true,如果不存在则删除失败,返回值为false

语法2:集合名称.remove(索引,元素);    特有方法

在指定索引删除元素,返回值为删除的元素

import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素// 通用方法l.add("aaa");l.add("bbb");l.add("ccc");System.out.println(l);// [aaa, bbb, ccc]// 特有方法// 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素l.add(1,"qqq");System.out.println(l);// [aaa, qqq, bbb, ccc]// 3.删除元素// 通用方法// 集合未存在java 删除失败 返回falseboolean r1=l.remove("java");System.out.println(r1);// falseSystem.out.println(l);// [aaa, qqq, bbb, ccc]// 集合存在qqq 删除成功 返回trueboolean r2=l.remove("qqq");System.out.println(r2);// trueSystem.out.println(l);// [aaa , bbb, ccc]// 特有方法// 在指定索引处删除元素String r3=l.remove(2);System.out.println(r3);// cccSystem.out.println(l);// [aaa , bbb]}
}

3、修改元素

语法:集合名称.set(索引,元素);特有方法

修改指定索引的元素,返回值为修改前的元素

import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素// 通用方法l.add("aaa");l.add("bbb");l.add("ccc");System.out.println(l);// [aaa, bbb, ccc]// 特有方法// 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素l.add(1,"qqq");System.out.println(l);// [aaa, qqq, bbb, ccc]// 3.修改元素// 修改指定索引的元素 返回修改前的元素String r1=l.set(1, "kkk");System.out.println(r1);// qqqSystem.out.println(l);// [aaa, kkk, bbb, ccc]}
}

4、获取元素

语法:集合名称.set(索引);特有方法

返回值为该索引对应的元素

import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素// 通用方法l.add("aaa");l.add("bbb");l.add("ccc");System.out.println(l);// [aaa, bbb, ccc]// 特有方法// 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素l.add(1,"qqq");System.out.println(l);// [aaa, qqq, bbb, ccc]// 3.获取元素// 返回值为该索引对应的元素String r1=l.get(1);System.out.println(r1);// qqq}
}

5、注意点

因为出现了方法的重载,在调用方法时,会优先调用形参类型与实参类型一致的方法

三、List的遍历方式

List的遍历方式不仅继承Collection接口的遍历方式,还有自己特有的根据索引遍历的方式,它的遍历方式共5种,包括迭代器遍历、增强for遍历、lamdba表达式遍历、普通for循环(特有 因为List集合存在索引)、列表迭代器遍历(特有),其中迭代器遍历、增强for遍历、lamdba表达式遍历是继承Collection接口的遍历方式,用法完全一致

详情可以参考以下文章:http://t.csdnimg.cn/zTdXHicon-default.png?t=N7T8http://t.csdnimg.cn/zTdXH

1、迭代器遍历

语法:

Iterator<集合元素类型>迭代器名称=集合名称.Iterator();

while(迭代器对象名称.hasnext()){

        System.out.println(迭代器对象名称.next());

}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class 迭代器遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.遍历集合// 通过iterator方法创建迭代器对象Iterator<String> it=l.iterator();// hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回falsewhile (it.hasNext()){// next()是用来返回当前位置元素 并指向下一位置的元素String s=it.next();System.out.println(s);}// aaa// bbb// ccc}
}

2、列表迭代器遍历(特有)

列表迭代器遍历与迭代器遍历的方法很相似,不同的是列表迭代器遍历不仅可以在遍历的时候删除元素,还可以在遍历的时候添加元素

语法:(仅仅遍历)

ListIterator<集合元素类型>迭代器名称=集合名称.ListIterator();

while(迭代器对象名称.hasnext()){

        System.out.println(迭代器对象名称.next());

}

补充知识:

ListIterator与Iterator的关系: ListIterator接口则是一个专门为List设计的迭代器接口 它扩展了Iterator接口,并添加了一些针对List集合特有的方法

ListIterator与List的关系: ListIterator是专门为List设计的一个迭代器的接口 List含有获取ListIterator迭代器的方法 即listIterator()

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class 列表迭代器遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.列表迭代器遍历// 通过listIterator方法生成列表迭代器/*ListIterator与Iterator的关系:ListIterator接口则是一个专门为List设计的迭代器接口它扩展了Iterator接口,并添加了一些针对List集合特有的方法ListIterator与List的关系:ListIterator是专门为List设计的一个迭代器的接口List含有获取ListIterator迭代器的方法 即listIterator()*/ListIterator<String> it=l.listIterator();// hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回falsewhile (it.hasNext()){// next()是用来返回当前位置元素 并指向下一位置的元素String s=it.next();System.out.println(s);}//aaa//bbb//ccc}
}

语法:(遍历中增加元素)

it.add(元素);

注意:ListIteratoradd()方法的作用是在当前迭代器位置之前插入一个元素

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class 列表迭代器遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.列表迭代器遍历// 通过listIterator方法生成列表迭代器/*ListIterator与Iterator的关系:ListIterator接口则是一个专门为List设计的迭代器接口它扩展了Iterator接口,并添加了一些针对List集合特有的方法ListIterator与List的关系:ListIterator是专门为List设计的一个迭代器的接口List含有获取ListIterator迭代器的方法 即listIterator()*/ListIterator<String> it=l.listIterator();// hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回falsewhile (it.hasNext()){// next()是用来返回当前位置元素 并指向下一位置的元素String s=it.next();if(s.equals("bbb")){it.add("qqq");}System.out.println(s);}/*第一次遍历时指针指向aaa 调用it.next(); 将aaa赋值给s 并将指针指向下一位置bbb然后判断s是否为bbb 此时s不是bbb 因此it.add("qqq");没有执行  输出aaa第二次遍历时指针指向bbb 调用it.next(); 将bbb赋值给s 并输出bbb 并将指针指向下一位置ccc然后判断s是否为bbb 此时s是bbb 因此it.add("qqq");执行 并输出bbbListIterator的add()方法的作用是在当前迭代器位置之前插入一个元素。所以在ccc前添加qqq 将ccc赋值给s 此时s不是bbb 因此it.add("qqq");不执行 并将指针指向下一位置(没有元素) 循环结束整个过程qqq没有输出*///aaa//bbb//cccSystem.out.println(l);// [aaa, bbb, qqq, ccc]}
}
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class 列表迭代器遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.列表迭代器遍历// 通过listIterator方法生成列表迭代器/*ListIterator与Iterator的关系:ListIterator接口则是一个专门为List设计的迭代器接口它扩展了Iterator接口,并添加了一些针对List集合特有的方法ListIterator与List的关系:ListIterator是专门为List设计的一个迭代器的接口List含有获取ListIterator迭代器的方法 即listIterator()*/ListIterator<String> it=l.listIterator();// hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回falsewhile (it.hasNext()){// next()是用来返回当前位置元素 并指向下一位置的元素it.add("qqq");String s=it.next();/*ListIterator的add()方法的作用是在当前迭代器位置之前插入一个元素。第一次遍历时指针指向aaa 调用it.add("qqq"); 会在aaa前添加qqq然后调用it.next()输出aaa 并将指针指向下一位置bbb 因此qqq不会输出第二次遍历时指针指向bbb 调用it.add("qqq"); 会在bbb前添加qqq然后调用it.next()输出bbb 并将指针指向下一位置ccc 因此qqq不会输出第三次遍历时指针指向aaa 调用it.add("qqq"); 会在ccc前添加qqq然后调用it.next()输出aaa 并将指针指向下一位置(没有元素) 因此qqq不会输出循环结束*/System.out.println(s);}//aaa//bbb//cccSystem.out.println(l);// [qqq, aaa, qqq, bbb, qqq, ccc]}
}

3、增强for遍历

快速生成增强for遍历:集合名称.for+回车

import java.util.ArrayList;
import java.util.List;public class 增强for遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.遍历集合// 增强for遍历// 快速生成增强for遍历:集合名称.for+回车// s是用来存储遍历的元素for (String s : l) {System.out.println(s);}// aaa// bbb// ccc}
}

4、lamdba表达式遍历

forEach方法的底层其实是一个循环遍历  依次得到集合中的每一个元素

并将每一个元素传递给accept方法(其中String s中,s就是传入的元素)

 accept方法就是将传入的元素输出

最后利用lamdba表达式进行简化

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;public class lamaba表达式遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.lamdba表达式遍历// forEach方法的底层其实是一个循环遍历 依次得到集合中的每一个元素// 并将每一个元素传递给accept方法(其中String s,s就是传入的元素)// accept方法就是将传入的元素输出// 简化前:l.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});// aaa// bbb// ccc// 简化后:l.forEach(s->System.out.println(s));// aaa// bbb// ccc}
}

5、普通for循环(特有 因为List集合存在索引)

语法:       

for (int i = 0; i < l.size(); i++) {
            System.out.println(l.get(i));
  }

通过get和size方法结合,遍历集合的元素

import java.util.ArrayList;
import java.util.List;public class 普通for遍历 {public static void main(String[] args) {// 1.创建集合List<String> l=new ArrayList<>();// 2.添加元素l.add("aaa");l.add("bbb");l.add("ccc");// 3.普通for遍历元素// 通过集合名称.size().fori快速生成for循环// l.size()获取集合的长度// l.get(i)获取索引为i的元素值for (int i = 0; i < l.size(); i++) {System.out.println(l.get(i));}//aaa//bbb//ccc}
}

6、五种遍历方式的对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/637815.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.Eureka服务发现+Ribbon+RestTemplate服务调用

order-service服务通过服务名称来代替 ip:port的方式访问user-service服务的接口。 原来的请求代码&#xff1a; Service public class OrderServiceImpl implements OrderService {Autowiredprivate OrderMapper orderMapper;Autowiredprivate RestTemplate restTemplate;Ov…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

MacOS 文件系统种类及介绍

MacOS 文件系统种类 详细介绍 详细介绍 从图片中我们可以看到一个文件系统选择器的界面&#xff0c;列出了多种不同的文件系统选项。这些文件系统各有其特点和用途&#xff0c;以下是它们之间的主要区别&#xff1a; APFS&#xff1a;Apple File System&#xff0c;是苹果公司为…

AtCoder Beginner Contest 350

A - Past ABCs 简单的枚举判断即可 #include "bits/stdc.h" using namespace std;#define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0); #define all(x) x.begin(),x.end() #define pi pair<int,int> #define vi vecto…

【QT进阶】Qt http编程之用户登录注册功能实现

往期回顾 【QT进阶】Qt http编程之http与https简单介绍-CSDN博客 【QT进阶】Qt http编程之后端API测试工具postman使用介绍-CSDN博客 【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客 【QT进阶】Qt http编程之用户登录注册功能实现 一、最终效果展示 重点在逻辑实现&a…

Linux基础和常见命令速览

来源&#xff1a;Linux 基础知识总结 | JavaGuide 一、Linux文件系统 1. 文件系统 Linux 系统中的一个重要的概念&#xff1a;一切都是文件。 在 Linux 操作系统中&#xff0c;一切被操作系统管理的资源&#xff0c;如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件…

三、Flask模型基础

ORM 创建模型 # exts.py&#xff1a;插件管理 # 扩展的第三方插件 # 1.导入第三方插件 from flask_sqlalchemy import SQLAlchemy # ORM插件 from flask_migrate import Migrate # 2. 初始化 db SQLAlchemy() # ORM migrate Migrate() # 数据迁移 # 3. 和app对象绑定 def…

【JVM常见问题总结】

文章目录 jvm介绍jvm内存模型jvm内存分配参数jvm堆中存储对象&#xff1a;对象在堆中创建分配内存过程 jvm 堆垃圾收集器垃圾回收算法标记阶段引用计数算法可达性分析算法 清除阶段标记清除算法复制算法标记压缩算法 实际jvm参数实战jvm调优jvm常用命令常用工具 jvm介绍 Java虚…

WebSocket 快速入门 - springboo聊天功能

目录 一、概述 1、HTTP&#xff08;超文本传输协议&#xff09; 2、轮询和长轮询 3、WebSocket 二、WebSocket快速使用 1、基于Java注解实现WebSocket服务器端 2、JS前端测试 三、WebSocket进阶使用 1、如何获取当前用户信息 2、 后端聊天功能实现 一、概述 HTTP…

C语言语法进阶

条件运算符 条件运算符是 C 语言中唯一的一种三目运算符。三目运算符代表有三个操作数&#xff1b;双目 运算符代表有两个操作数&#xff0c;如逻辑与运算符就是双目运算符&#xff1b;单目运算符代表有一个操作数&#xff0c; 如逻辑非运算符就是单目运算符。运算符也称操作符…

react之组件与JSX

第一章 - 描述用户界面 概述&#xff1a;React是一个用于构建用户界面&#xff08;UI&#xff09;的JavaScript库&#xff0c;用户界面由按钮&#xff0c;文本和图像等小单元内容构建而成。React帮助你把它们组合成可重用&#xff0c;可嵌套的组件。从web端网站到移动端应用&a…

基于Linux共享内存的数据分发DDS——C语言实现

基于共享内存的数据分发DDS——C语言实现 一、软件功能介绍 在linux环境下用C语言开发的基于共享内存的数据分发DDS软件。采用了共享内存、多线程、读写锁以及互斥锁实现。 软件支持功能如下&#xff1a; 内部采用共享内存进行数据传输&#xff0c;支持多进程、多线程的数据…