【Java】集合中单列集合详解(一):Collection与List

news2024/10/22 12:52:04


目录

引言

一、Collection接口

1.1 主要方法 

1.1.1 添加元素

1.1.2 删除元素

1.1.3 清空元素

1.1.4 判断元素是否存在 

1.1.5 判断是否为空

1.1.6 求取元素个数 

1.2 遍历方法

1.2.1 迭代器遍历

1.2.2 增强for遍历

1.2.3 Lambda表达式遍历 

1.2.4 应用场景

二、List接口

2.1 新增方法

2.1.1 指定位置添加元素

2.1.2 删除指定位置元素

2.1.3 修改指定位置元素

2.1.4 返回指定位置元素

2.2 遍历方法

2.2.1 列表迭代器遍历

2.2.2 普通for遍历

2.2.3 应用场景

结语


引言

在Java中,集合框架(Java Collections Framework)是一组设计用来操作对象集合的类和接口。它提供了一种统一的方式来存储和操作对象集合。集合框架主要包括两大类:单列集合(Single-Column Collections)和双列集合(Two-Column Collections,比如Map)。本文将详细讲解单列集合中的两个关键接口:Collection和List。


一、Collection接口

Collection接口是Java单列集合框架的根接口,它定义了一系列用于操作集合的通用方法。所有单列集合类,包括ListSet,都实现了这个接口。


1.1 主要方法 

方法名说明
boolean add(E e)添加元素
boolean remove(E e)把给定的对象从当前集合中移除
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数

1.1.1 添加元素

Collection是一个接口,不能之间创建它的对象,需要创建其实现类的对象来验证其方法。

// 1.创建集合
Collection<String> coll = new ArrayList<>();

// 2.添加数据
coll.add("zhangsan");

// 3.打印
System.out.println(coll);

1.1.2 删除元素
// 创建集合
Collection<String> coll = new ArrayList<>();

// 添加数据
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");

// 打印
System.out.println(coll);

// 删除元素
coll.remove("lisi");

// 打印
System.out.println(coll);

第二次打印相较于第一次打印会少一个元素:"lisi"。


1.1.3 清空元素
// 创建集合
Collection<String> coll = new ArrayList<>();

// 添加数据
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");

// 打印
System.out.println(coll);

// 清空元素
coll.clear();

// 打印
System.out.println(coll);

第一次打印:[zhangsan, lisi, wangwu]。

第二次打印:[]。


1.1.4 判断元素是否存在 

代码紧接上文:

// 判断zhangsan这个元素在集合中是否存在
System.out.println(coll.contains("zhangsan"));

注意:集合中contains()方法底层是依赖equals()方法判断是否存在;因此如果集合中存储的是自定义类,一定要重写equals()方法之后contains()方法才能正确判断元素是否存在


1.1.5 判断是否为空

代码紧接上文:

//判断集合中是否为空
System.out.println(coll.isEmpty()); //false

1.1.6 求取元素个数 

代码紧接上文:

//求取集合中的元素个数
System.out.println(coll.size());

1.2 遍历方法


1.2.1 迭代器遍历

遍历格式:

Iterator<E> it = 集合名称.iterator();
while(it.hasNext()){
    集合元素类型 变量名 = it.next();
    System.out.println(变量名);
}

注意:

①循环中不能使用集合的添加或删除方法(可以使用迭代器的删除方法)

②循环只用一次next()方法(使用多次可能会导致NoSuchElementException的异常) 


1.2.2 增强for遍历

JDK5以后出现,其内部原理就是一个Iterator迭代器。

遍历格式:

for(数据类型 变量名 : 集合/数组){

}

注意:

①单列集合以及数组才能用增强for循环

②在增强for循环中修改其变量的值,不会改变集合中原来的数据


1.2.3 Lambda表达式遍历 

JDK8以后出现,使用foreach方法。

遍历格式:

集合名称.forEach((参数) -> {
        //方法体
    }
);

1.2.4 应用场景

迭代器遍历:在遍历过程需要删除元素

增强for遍历:仅仅想遍历

Lambda表达式遍历:仅仅想遍历


二、List接口

List接口是Collection接口的一个子接口,它继承并扩展了Collection接口的所有方法。List集合是有序的集合,允许存储重复的元素,并且可以通过索引访问元素。


2.1 新增方法

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

2.1.1 指定位置添加元素
// 创建集合
List<String> list = new ArrayList<>();

// 添加数据
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");

// 打印
System.out.println(list);

// 指定位置添加元素
list.add(0, "laoliu");

// 打印
System.out.println(list);

在此集合中的指定位置插入指定的元素,原来位置上的元素往后挪一个索引。


2.1.2 删除指定位置元素

代码紧接上文:

//删除索引位置为0的元素
String s = list.remove(0);

注意:在调用方法时,如果方法出现重载,优先调用实参与形参类型一致的方法


2.1.3 修改指定位置元素

代码紧接上文:

String result = list.set(0, "abc");
System.out.println(result);
System.out.println(list);

修改指定索引处的元素,返回被修改的元素;被替换的那个元素,在集合中就不存在了。


2.1.4 返回指定位置元素

代码紧接上文:

//返回索引为0的元素
String s = list.get(0);
System.out.println(s);

2.2 遍历方法

相较与Collection接口,List接口多了两种遍历方法。


2.2.1 列表迭代器遍历

遍历格式:

ListIterator<E> it = 集合名称.ListIterator();
while(it.hasNext()){
    集合元素类型 变量名 = it.next();
    System.out.println(变量名);
}

注:与迭代器遍历相比,在遍历的过程中可以添加元素 


2.2.2 普通for遍历

size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素 

for (int i = 0; i < list.size(); i++) {
    //i:依次表示集合中的每一个索引
    String s = list.get(i);
    System.out.println(s);
}

2.2.3 应用场景

迭代器遍历:在遍历过程中需要删除元素

列表迭代器:在遍历过程中需要添加或删除元素

增强for遍历:仅仅只是遍历

Lambda表达式遍历:仅仅只是遍历

普通for遍历: 在遍历过程中需要操作索引


结语

Collection接口是Java集合框架的根接口,提供了基本的集合操作。

List接口是Collection的子接口,支持基于索引的操作,允许存储重复元素,并且是有序的。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Autosar Dcm配置-App到Boot的跳转及1002回复配置及实现-基于ETAS软件

文章目录 前言App软复位的实现Dcm配置BswM配置BswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionListApp回复1002的实现Dcm配置代码实现App回NRC78的实现Dcm配置代码实现总结前言 在软件刷写流程中,上位机(诊断仪)发送1002后,APP检查允许跳转boot后,在…

python脚本处理--批量压缩解压文件(zip、rar) / 读取txt文件并在txt每行文件后面增加内容

一、批量压缩、解压文件 os库是为了监测生成的文件夹是否已存在。主要的库是zipfile&#xff0c;它提供了有关windows下的文件/文件夹的压缩、解压的函数。 压缩、解压函数及整体代码如下&#xff1a; import os import zipfiledef Compress_path_zip(path_all):path_all_list…

接口测试-day3-jmeter-3http请求默认值

postman只需要写上请求方式和url即可&#xff0c;但是在jmeter中则是分开写的。 对于同一个项目的接口而言&#xff1a;他们的协议、域名、端口号、内容编码都是一样的。这样就相当于做了重复的工作。 不一样的地方只是在路径。不同的页面的路径是不同的。 如果我们设置了相…

文心智能体:我的旅游小助手

文章目录 一、全球旅游推荐官&#xff08;旅游小帮手介绍&#xff09;二、为什么会创建全球旅游推荐官呢&#xff1f;1.创意灵感2.实现思路 三、开发步骤和方法四、调试方法和总结五、探索AI未来&#xff0c;开启无限可能&#xff1a;文心智能体平台&#xff0c;智能创新的领航…

6.Pytest快速上手

1.安装pytest pip install pytest 2.编写测试用例 1.test_开头的文件 2.test_开头的函数 3.Test_开头的类 4.用例中应该有断言 def test_cofool():assert "浩宇" "真帅" 3.执行测试用例 1.用命令行启动 pytest 2.用代码启动 import pytest#对用例进…

hadoop全分布式搭建(三台虚拟机,一个主节点,两个从节点)

根据尚硅谷哔哩哔哩视频搭建&#xff1a;bilibili.com/video/BV1Qp4y1n7EN/ 安装虚拟机教程可参考&#xff1a;VMware虚拟机 安装 Centos7(linux)&#xff08;新手超详细教程&#xff09;_vmware安装centos7教程-CSDN博客 集群配置如下&#xff1a; 一、先配置一台虚拟机hadoo…

【详细版教程】vue-cli 卸载(卸载不了)vue2.x.x版本卸载不了,无法更新版本的解决方案

今天新建vue的项目时&#xff0c;遇到以下问题 vue create is a Vue CLI 3 only command and you are using Vue CLI 2.9.6. You may want to run the following to upgrade to Vue CLI 3: 官网给出的解决方案&#xff1a; npm uninstall -g vue-cli npm install -g vue/…

springcloud之服务提供与负载均衡调用 Eureka

前言 提供一个基于Eurka的服务注册中心&#xff0c;两个服务提供者之后分别使用Ribbon、Fegin方式进行调用&#xff0c;测试负载均衡。 服务提供者Service Provider 本质上是一个 Eureka Client&#xff0c;它在服务启动时&#xff0c;会调用服务注册方法&#xff0c;向 Eurek…

Vue:若依部门数据权限设置

目录 一、修改菜单树二、后台修改三、新建用户配置数据权限 一、修改菜单树 修改菜单树&#xff0c;增加权限字符system:user:list&#xff0c;权限字符根据自己后台数查询的权限判断 二、后台修改 在Mapper层增加DataScope(deptAlias "sys_dept")注解&#xff0c…

Unity中搜索不到XR Interaction Toolkit包解决方法

问题&#xff1a; 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法&#xff1a; Package manager左上角&#xff0c;点加号&#xff0c;选择 Add package from git URL..&#xff0c;…

动力电池SOC估算方法

1. SOC介绍 电池的荷电状态SOC反映电池的剩余容量状况&#xff0c;即在一定的放电倍率下&#xff0c;当前电池的剩余容量与总容量的比值。 为了充分发挥电池性能和提高安全性&#xff0c;需要准确估算电池SOC。动力电池在使用过程中表现的高度非线性提高了SOC估算的难度&#…

【linux】信号(下)

8. 阻塞信号 (一)信号其他相关常见概念 实际执行信号的处理动作称为信号递达(Delivery)信号从产生到递达之间的状态,称为信号未决(Pending)进程可以选择阻塞 (Block )某个信号被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作(即被阻塞的信…

class 034 链表高频题目和必备技巧

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. 左程云的个人空间-左程云个人主页-哔哩哔哩视频…

Redis 典型应用之缓存

目录 1. 缓存的基本概念 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 3.2.1 内存淘汰策略 1. FIFO (First In First Out) 先进先出 2. LRU (Least Recently Used) 淘汰最久未使使用的 3. LFU (Least Frequently Used) 淘汰访问次数最少的 4…

用C++编写信息管理系统(歌单信息管理)

C语言是面向过程的编程语言&#xff0c;而C是面向对象的编程语言&#xff0c;在书写代码时风格有所不同&#xff08;也存在很多共性&#xff09;。 程序说明 本次系统程序使用的是C语言进行编写&#xff0c;主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…

【C++学习】核心编程之类和对象(上)黑马学习笔记—超详细

目录 &#xff08;一&#xff09;封装 1.1 封装的意义&#xff1a; 意义一&#xff1a;在设计类的时候&#xff0c;属性和行为写在一起&#xff0c;表现事物 意义二&#xff1a;类在设计时&#xff0c;可以把属性和行为放在不同的权限下&#xff0c;加以控制 1.2 struct和…

【vue】组件及组件化+组件⽣命周期

代码获取 04-组件及组件化组件⽣命周期 ⼀、组件及组件化 1. 为什么需要组件&#xff1f; 1.1 思考 以可折叠⾯板为例, 现要展⽰3个, 如何操作? 可折叠⾯板案例的代码 &#xff1a; <script setup> import { ref } from vue const visible ref(false) </scri…

Day14

std::string的底层实现 三种方式&#xff1a; 深拷贝 写时复制 短字符串优化 深拷贝 无论什么情况&#xff0c;都是采用拷贝字符串内容的方式解决。不需要改变字符串内容时&#xff0c;对字符串进行频繁复制。 用一个string对象初始化另一个string对象时&#xff0c;源对…

MySQL SELECT 查询(三):查询常用函数大全

MySQL SELECT 查询&#xff08;三&#xff09;&#xff1a;查询常用函数大全 1. 单行函数 单行函数是 SQL 中一类重要的函数&#xff0c;它们可以对单行数据进行处理&#xff0c;并返回单个结果。单行函数可以嵌套使用&#xff0c;并提供灵活的数据处理能力。 1.1 定义 只对单…

微知-Mellanox网卡如何导出firmware中的config文件以及文件中有些什么?(ini配置文件,8个区)

背景 Mellanox网卡早期版本以及Engineer simple的DPU支持导出配置文件&#xff0c;该配置文件就是用来告诉firmware的行为。但不是mlxconfig真正设置的文件(mlxconfig -d xxx -e -q应该就是把这个文件读取出来&#xff0c;并且有3个文件&#xff0c;包括默认的&#xff0c;当前…