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

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


目录

引言

一、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的子接口,支持基于索引的操作,允许存储重复元素,并且是有序的。

 

相关文章:

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

目录 引言 一、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 应用场景 二、…...

【Fine-Tuning】大模型微调理论及方法, PytorchHuggingFace微调实战

Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战 文章目录 Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战1. 什么是微调(1) 为什么要进行微调(2) 经典简单例子&#xff1a;情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2…...

清华系“仓颉”来袭:图形起源:用AI颠覆字体设计,推动大模型商业化落地

大模型如何落地&#xff1f;又该如何实现商业化&#xff1f;这一议题已成为今年科技领域的焦点话题。 在一个鲜为人知的字体设计赛道上&#xff0c;清华创业公司“图形起源”悄然实现了商业变现&#xff1a;他们帮助字体公司将成本降低了80%&#xff0c;生产速度提升了10倍以上…...

分布式一致性协议的深度解析:Paxos与Raft

分布式系统的复杂性源于节点失效、网络分区、消息丢失等诸多不确定性。在这种背景下&#xff0c;分布式一致性问题应运而生&#xff0c;成为解决这些问题的核心。本文将从理论到实践&#xff0c;深入探讨两种经典的一致性协议&#xff1a;Paxos与Raft。文章适合有一定分布式系统…...

ai写作,五款软件助你快速写作!

在这个信息爆炸的时代&#xff0c;内容创作成为了连接用户、传递价值的桥梁。然而&#xff0c;面对日益增长的创作需求&#xff0c;如何在保证质量的同时提升效率&#xff0c;成为了每位创作者面临的难题。幸运的是&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI写作软…...

解决JavaScript 数学运算精度丢失的问题

JavaScript 中执行浮点数运算时可能会遇到精度丢失的问题。这通常是因为浮点数的表示遵循IEEE 754标准&#xff0c;而这种表示法只能精确地表示有限的数字。对于大多数程序员来说&#xff0c;这不是一个问题&#xff0c;因为它允许计算机处理超出精度范围之外的数字。然而&…...

mysql学习教程,从入门到精通,SQL窗口函数(38)

1、SQL窗口函数 SQL窗口函数&#xff08;Window Functions&#xff09;是一种强大的数据分析工具&#xff0c;它们允许你在结果集的行上执行计算&#xff0c;而不需要将这些行分组到单独的输出行中。窗口函数通常与OVER()子句一起使用&#xff0c;该子句定义了窗口或分区&…...

gbase8s数据库实现黑白名单的几种方案

1、借用操作系统的黑白名单 2、使用数据库 TRUSTED CONTEXT 机制 CREATE TRUSTED CONTEXT tcx1USER rootATTRIBUTES (ADDRESS 172.16.39.162)ATTRIBUTES (ADDRESS 172.16.39.163)ENABLEWITH USE FOR wangyx WITHOUT AUTHENTICATION; 如上创建 可信任上下文对象 tcx1 在 jdb…...

Qt-窗口布局按钮输入类

1. 窗口布局 Qt 提供了很多摆放控件的辅助工具&#xff08;又称布局管理器或者布局控件&#xff09;&#xff0c;它们可以完成两件事&#xff1a; 自动调整控件的位置&#xff0c;包括控件之间的间距、对齐等&#xff1b; 当用户调整窗口大小时&#xff0c;位于布局管理器内的…...

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区 9 月月报更新啦&#xff01;这里将记录 Apache DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…...

在docker中安装并运行mysql8.0.31

第一步&#xff1a;命令行拉取mysql镜像 docker pull mysql:8.0.31查看是否拉取成功 docker images mysql:latest第二步&#xff1a;运行mysql镜像&#xff0c;启动mysql实例 docker run -p 3307:3307 -e MYSQL_ROOT_PASSWORD"123456" -d mysql:8.0.313307:3307前…...

C++ | Leetcode C++题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}vector<vector<int>> combinations(buckets 1,vector<int>(buckets 1));combinations[0][0] …...

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样

【万字长文】Word2Vec计算详解&#xff08;三&#xff09;分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff0…...

【分布式微服务云原生】探索Dubbo:接口定义语言的多样性与选择

目录 探索Dubbo&#xff1a;接口定义语言的多样性与选择引言Dubbo的接口定义语言&#xff08;IDL&#xff09;1. Java接口2. XML配置3. 注解4. Protobuf IDL 流程图&#xff1a;Dubbo服务定义流程表格&#xff1a;Dubbo IDL方式比较结论呼吁行动Excel表格&#xff1a;Dubbo IDL…...

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…...

DNS能加速游戏吗?

在游戏玩家追求极致游戏体验的今天&#xff0c;任何可能提升游戏性能的因素都备受关注&#xff0c;DNS&#xff08;域名系统&#xff09;便是其中一个被探讨的对象。那么&#xff0c;DNS能加速游戏吗&#xff1f; 首先&#xff0c;我们需要了解DNS的基本功能。DNS就像是互联网…...

Raspberry Pi3B+之C/C++开发环境搭建

Raspberry Pi3B之C/C开发环境搭建 1. 源由2. 环境搭建2.1 搭建C语言开发环境2.2 工程目录结构2.3 Makefile2.4 Demo (main.c) 3. 测试工程3.1 编译3.2 运行 4. 总结5. 参考资料 1. 源由 为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》&#xff0c;以及VINS-Fusion对于图…...

[笔记] 仿射变换性质的代数证明

Title: [笔记] 仿射变换性质的代数证明 文章目录 I. 仿射变换的代数表示II. 仿射变换的性质III. 同素性的代数证明1. 点变换为点2. 直线变换为直线 IV. 结合性的代数证明1. 直线上一点映射为直线上一点2. 直线外一点映射为直线外一点 V. 保持单比的代数证明VI. 平行性的代数证明…...

遥感影像-语义分割数据集:sar水体数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该数据集由WHU-OPT-SAR数据集整理而来&#xff0c;覆盖面积51448.56公里&#xff0c;分辨率为5米。据我们所知&#xff0c;WHU-OPT-SAR是第一个也是最大的土地利用分类数据集&#xff0c;它融合了高分辨率光学和SAR图像&#xff0c;并进行了充…...

极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...