Collection接口

目录

一. Collection基本介绍

二. Collection中的方法及其使用

1. 添加元素

(1) 添加单个元素

(2) 添加另一集合中的所有元素

2. 删除元素

(1) 删除单个元素

 (2) 删除某个集合中包含在其他集合中的元素

(3) 保留两个集合中的交集部分, 删除其他元素.

3. 遍历元素

(1) 使用 for - each 遍历

(2) 使用迭代器遍历


一. Collection基本介绍

(1) Collection 是集合结构层次中的根接口.

(2) Collection用于存储和组织一组对象 (这些对象也称为Collection的元素).

[注]: 这些对象可以是不同类的对象.

(3) 一些Collection用于存放可重复, 有序的元素(List);  另一些Collection用于存放不可重复, 无序的元素(Set).

二. Collection中的方法及其使用

通过查看文档我们可以看到, Collection主要有以上几种方法. 我把其中比较重要的几个方法勾选了出来. 这些我们要重点熟悉掌握. 

下面我们通过代码具体演示一下Collection接口的使用.

首先我们需要创建一个对象, 由于Collection是一个接口, 所以它本身不能实例化, 我们用它的派生类ArrayList来创建一个Collection对象.

[注]: 这里父类引用指向了子类对象, 所以这里就是一个"向上转型", 这里的collection对象只能调用父类Collection中的方法, 不能调用ArrayList中特有的方法.

1. 添加元素

(1) 添加单个元素

只需调用 add() 方法.

Java中, 当我们调用 System.out.println() 方法时打印一个对象时, 实际上是在调用该对象的toString()方法. toString()方法默认返回该对象的类名和hashCode, 但是这个东西通常没什么用. 所以很多类就重写了toString()方法, 返回一个更具描述性的字符串. 这里的ArrayList类就重写了toString()方法.

所以, 这里打印Collection对象时, 就会打印出一个字符串.

(2) 添加另一集合中的所有元素

调用 addAll() 方法, 参数传递一个集合.

 如上述代码, 将collection1添加到collection中. 结果如下:

2. 删除元素

(1) 删除单个元素

只需调用remove()方法.

 

 (2) 删除某个集合中包含在其他集合中的元素

使用removeAll()方法. 参数传递一个集合.

上述代码表示的操作就是在collection中删除collection1中的所有元素. 结果如下:

(3) 保留两个集合中的交集部分, 删除其他元素.

使用retainAll() 方法, 参数传递一个集合.

 如上述代码, 保留collection和collection1的交集. 结果如下:

3. 遍历元素

(1) 使用 for - each 遍历

(2) 使用迭代器遍历

迭代器 (Iterator) 是Java提供的, 一种专门用来遍历集合的方式.

我们首先需要创建一个迭代器对象. 如何创建呢? 我们知道Collection继承了Iterator类, 而且Collection中有一个iterator()方法, 它的作用就是返回当前集合的迭代器. 

 所以我们第一步调用Collection的iterator()方法, 创建一个迭代器.

好, 那么有了迭代器对象之后, 下一步该如何遍历呢? --> 调用迭代器对象it的方法.  

好, 如上图, Iterator类主要有 hasNext() 方法,  next() 方法,  remove() 方法.  hasNext() 用来判断是否有下一个可迭代的元素, 如果有, 返回true. next() 用来返回下一个元素. remove() 用于删除迭代器刚刚返回的元素. 

如上述代码, 如果当前集合的迭代器有下一个可迭代元素, 则打印下一个可迭代元素. 结果如下:

如果我们想边遍历边删除可以吗?  我们来尝试一下:

若使用 Iterator 的 remove() 方法:

若使用 Collection 的 remove() 方法:

我们可以看到, 用 Iterator 的 remove() 方法就能正常删除, 而使用 Collection 的 remove()方法 就不能正常删除.  这是因为 Iterator 的 remove() 方法保证了状态的一致性, 是安全的删除; 而除迭代器删除外的其他删除都无法保证迭代的一致性, 是不安全的. 

因此, 若我们想在迭代的同时删除底层集合中的元素, 就只能调用 Iterator 的 remove() 方法.

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

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

相关文章

Mybatis Plus 3.0 快速入门

1、简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、创建并初始化数据库 2.1、创建数据库 mybatis_plus 2.2、创建 User 表 其表结构如下: idnameageemail1Jone18test1@baomidou.com2Jack…

图像清晰度计算

对于单图清晰度检测,可以采用基于梯度的方法来评估图像的清晰度。这些方法通过计算图像中边缘信息的强度来量化图像是否足够清晰。以下是几种常用的技术及其具体实现方式,特别适用于单张图片的清晰度检测。 拉普拉斯变换(Laplacian&#xff…

Verilog实现图像处理的行缓存Line Buffer

在图像处理中,难免会遇到对图像进行卷积或者模板的局部处理,例如ISP中的一些算法,很大部分都需要一个窗口,在实时视频处理中,可以利用行缓存Line buffer可以暂存几行数据,然后同时输出每行中的对应列的像素…

【银河麒麟高级服务器操作系统】有关dd及cp测试差异的现象分析详解

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn dd现象 使用银河麒麟高级服务器操作系统执行两次…

C++ 中面向对象编程如何处理异常?

一、引言 在 C 编程中,异常处理是一项重要的技术,它可以帮助我们更好地管理程序中的错误情况,提高程序的稳定性和可靠性。特别是在面向对象编程中,异常处理更是不可或缺的一部分。本文将介绍 C 中面向对象编程如何处理异常&#…

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

记录2024-leetcode-字符串DP

10. 正则表达式匹配 - 力扣(LeetCode)

微信开发者工具(小程序)的版本管理,Git Push 和 Pull

微信开发者工具(小程序)的版本管理,Git Push 和 Pull 一、设置 第一次用微信开发者工具自带的版本管理的拉取和推送功能,稍稍的研究了下。 1、首先要先设置 “用户”,名字和邮箱,不一定要真名&#xff0c…

MyBatis学习笔记:进阶知识2

MyBatis 作为一款优秀的持久层框架,在 Java 开发中占据着重要地位。它简化了数据库操作,提供了灵活且高效的数据访问方式。本文将深入探讨 MyBatis 的核心功能,包括分页查询、联表查询、动态 SQL 以及代码自动生成,并结合实际案例…

2020-12-07 光棍数

由光棍数的特征可推导其商的个位数不存在偶数且只有1、3、7、9这4个数。一个数可匹配多个光棍数且必定是中间隔着0的循环数。 void 光棍数(int n) {//缘由http://ask.csdn.net/questions/3444069 做乘法运行时间超长int w 0; long long x 111111111111111, j 0;//j x*n;/…

【Linux系统】—— 初识 shell 与 Linux 中的用户

【Linux系统】—— 初识shell 与 Linux 中的用户 1 Xshell 运行原理1.1 命令行的组成1.2 外壳程序 2 Linux中的用户2.1 两种用户2.2 创建普通用户2.3 用户切换2.3.1 普通->超级2.3.2 超级->普通 3 指令的短暂提权3.1 为什么要提权3.2 sudo 指令3.3 人人都能提权吗 1 Xshe…

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一,它不仅确保了数据的正确表示,还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义,减少误解,并且对于自动化报告生成、财…

Android显示系统(10)- SurfaceFlinger内部结构

一、前言: 之前讲述了native层如何使用SurfaceFlinger,我们只是看到了简单的API调用,从本文开始,我们逐步进行SurfaceFlinger内部结构的分析。话不多说,莱茨狗~ 二、类图: 2.1、总体架构: 先看下SurfaceFlinger的关键成员和我们BootAnimation侧关键成员如何对应起来…

深度学习中的多通道卷积与偏置过程详解

目录 ​编辑 多通道卷积的深入理解 🔍 卷积核的多维特性 🌌 卷积操作的细节 🔧 多通道卷积的优势 🌟 偏置过程的深入理解 🎯 偏置的两种实现方式 🛠️ 偏置的作用与重要性 🌈 多通道卷…

易语言鼠标轨迹算法(游戏防检测算法)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

LeetCode 718. 最长重复子数组 java题解

https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/ 动态规划 class Solution {public int findLength(int[] nums1, int[] nums2) {int len1nums1.length,len2nums2.length;int[][] dpnew int[len11][len21];dp[0][0]0;//没有意义,…

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scratc…

5.3 C++ 容器的嵌套

一)容器嵌套的概念 在 C 中,容器嵌套是指将一种容器类型作为另一种容器的元素。这允许创建更复杂的数据结构,以满足各种编程需求。例如,可以将一个vector容器放入另一个vector容器中,或者将一个map容器的元素设置为lis…

spark读取普通文件

spark读取普通文件 txt文件 """ 将一行数据当做一个字段,需要自己切割 字段名称为value 表结构 可以从sql中搞 """ df spark.read.text("../../data/wordcount/input/data.txt") df spark.read.format("text"…

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间,我们在技术范围之外陷入了一个自证或者说下定义的怪圈,即要怎么样去介绍或者描述:我们是一个什么样的产品。它在当前这个世界上,处于…