【数据结构与算法】Collection接口迭代器

news2025/1/13 2:51:48

Java合集框架

数据结构是以某种形式将数据组织在一起的合集(collection)。数据结构不仅存储数据,还支持访问和处理数据的操作

在面向对象的思想里,一种数据结构也被认为是一个容器(container)或者容器对象(container object),它是一个能存储其他对象的对象,这里的其他对象常被称为数据或者元素

定义一种数据结构从实质上讲就是定义一个类。数据结构类应该使用数据域存储数据,并提供方法支持查找、插入和删除等操作

Java 提供了很多能有效地组织和操作数据的数据结构。这些数据结构通常称为 Java 合集框架(Java Collections Framework

Collection接口

Collection 接口为线性表、向量、栈、队列、优先队列以及集合定义了共同的操作

Set 和 List 是 Collection 的子接口

下面是实现 Collection 的子接口、实现子接口的抽象类以及后面的具体类

Collection 接口中定义了以下方法:

方法及返回类型描述
add(o: E) : boolean添加一个新的元素 o 到合集中
addAll(c: Collection<? extends E>) : boolean将合集 c 中的所有元素添加到该合集中
clear() : void从该合集删除所有元素
contains(o: Object) : boolean如果该合集包含元素 o,则返回 true
containsAll(c : Collection<?>) : boolean如果该合集包含 c 中所有的元素,则返回 true
equals(o: Object) : boolean如果该合集等同于另外一个合集 o,则返回 true
hashCode() : int返回该合集的哈希码
isEmpty() : boolean如果该合集没有包含元素,则返回 true
remove(o: Object) : boolean从该合集中移除元素 o
removeAll(c: Collectioin<?>) : boolean从该合集中移除 c 中的所有元素
retainAll(c: Collectioin<?>) : boolean保留同时位于 c 和该合集中的元素
size() : int返回该合集中的元素数目
toArray() : Object[]为该合集中的元素返回一个 Object 数组

Collection 接口提供了在集合中添加与删除元素的基本操作。add 方法给合集添加一个元素,addAll 方法把指定合集中的所有元素添加到这个合集中,remove 方法从元素中删除一个元素,removeAll 方法从这个合集中删除指定合集中的所有元素,retainAll 方法保留既出现在这个合集中也出现在指定合集中的元素。所有这些方法都返回 boolean 值,如果执行方法改变了这个合集,那么返回值为 trueclear 方法简单地移除合集中的所有元素

方法 addAllremoveAllretainAll 类似于集合上的并、差、交运算

Collection 接口提供了多种查询操作,方法 size 返回合集中元素的个数,方法 contains 检测合集中是否包含指定的元素,方法 containsAll 检测这个合集中是否包含指定合集中的所有元素。如果合集为空,方法 isEmpty 返回 true

Collection 接口的 toArray 方法返回一个合集的数组表

迭代器

每种合集都是可迭代的(Iterable),可以获得合集的 Iterator 对象来遍历合集中的所有元素

Iterator 是一种经典的设计模式,用于在不需要暴露数据是如何保存在数据结构的细节的情况下,来遍历一个数据结构

Iterable 接口中定义了以下方法:

方法及返回类型描述
iterator() : Iterator<E>为该合集中的元素返回一个迭代器

Iterator 接口中定义了以下方法:

方法及返回类型描述
hasNext() : boolean如果该迭代器还要遍历更多元素,则返回 true
next() : E返回该迭代器中的下一个元素
remove() : void移除使用 next 方法获取的上一个元素

Collection 接口继承自 Iterable 接口,Iterable 接口定义了 iterator 方法,该方法会返回一个迭代器

而 Iterator 接口为遍历各种类型的合集中的元素提供了一种统一的方法,Iterator 接口中的 iterator() 方法会返回一个 Iterator 的实例,这个实例可以使用 next() 方法对合集中的元素进行顺序访问,使用 hasNext() 方法来检测迭代器中是否还有更多的元素,以及使用 remove() 方法来移除迭代器返回的最后一个元素

写一个案例感受一下迭代器的魅力

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class TestIterator {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("Hello");
        collection.add("World");
        collection.add("Java");

        //遍历方法一
        Iterator<String> iterator = collection.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next().toUpperCase());
        }

        //遍历方法二
        for (String c : collection) {
            System.out.println(c.toUpperCase());
        }
    }
}

运行结果如下

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

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

相关文章

【MySQL】MySQL表的七大约束

序号系列文章1【MySQL】MySQL介绍及安装2【MySQL】MySQL基本操作详解3【MySQL】MySQL基本数据类型4【MySQL】MySQL表的七大约束文章目录MySQL表的约束1&#xff0c;默认约束2&#xff0c;非空约束3&#xff0c;唯一约束4&#xff0c;主键约束5&#xff0c;自增约束6&#xff0c…

详细分析单调栈,及正确性证明

什么是单调栈 对于一个数组&#xff0c;需要对每个位置生成&#xff0c;左右两边离它最近的&#xff0c;比它小&#xff08;或比它大&#xff09;的位置在哪 例如&#xff1a; 如果对每个位置都遍历下左右两边&#xff0c;找到第一个比它小的位置&#xff0c;就是O(N ^ 2)的…

IPv6 时代如何防御 DDoS 攻击?

在互联网世界&#xff0c;每台联网的设备都被分配了一个用于标识和位置定义的 IP 地址。20 世纪 90 年代以来互联网的快速发展&#xff0c;联网设备所需的地址远远多于可用 IPv4 地址的数量&#xff0c;导致了 IPv4 地址耗尽。因此&#xff0c;协议 IPv6 的开发和部署已经刻不容…

从第三方平台导出大数据量本地Excel怎么解决性能问题?

对于日常需要做分析的我们来说&#xff0c;周期性需要从第三方系统导出数据&#xff0c;日积月累数据量越来愈大&#xff0c;由开始的几百条数据慢慢增至十几万甚至百万级的数据量&#xff0c;在本地Excel直接做分析汇总老是卡顿等半天&#xff0c;效率日益低下&#xff0c;每天…

连续四年发布科技趋势预测,他们在探索中国科技的“主干道”

&#xff0c;*本文配图由百度飞桨文心一格提供AI绘画技术支持。古希腊流传着一句谚语&#xff1a;智慧不仅是能够明察眼前&#xff0c;更要能够预测未来。身处科技界&#xff0c;一到年底年初我们就会看到各种各样的趋势预测。这些预测五花八门&#xff0c;神奇多变。但大多数科…

JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 本地缓存变身分布式集群缓存,打破本地缓存天花板

大家好&#xff0c;又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容&#xff0c;将会通过系列专题&#xff0c;讲清楚缓存的方方面面。如果感兴趣&#xff0c;欢迎关注以获取后续更新。 上一篇文章中&#xff0c;我们知晓了如何在项目中通过不同的…

【Python】Numpy处理多项式类Polynomial

文章目录构造函数求导和积分求根和反演采样与拟合其他方法构造函数 Numpy中提供了多项式模块&#xff0c;里面封装了一些用以快速解决多项式问题的类和函数&#xff0c;其中最重要类的自然是Polynomial&#xff0c;其构造函数为 class numpy.polynomial.polynomial.Polynomia…

list容器的底层结构(详述insert()与erase())

目录 一、带头结点的双向循环链表&#xff08;list&#xff09; 二、贯穿list容器的insert与erase接口​编辑 一、带头结点的双向循环链表&#xff08;list&#xff09; 二、贯穿list容器的insert与erase接口 通过在指定位置的元素之前插入新元素来扩展容器。 这有效地增加了…

520页(17万字)集团大数据平台整体解决方案-v1.0

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 1.1.1 系统总体逻辑结构 4-14系…

Golang 面试题总结

一.基础部分 go语言的值类型和引用类型&#xff1f; 值类型&#xff1a;int、float、bool、string和数组这些类型都属于值类型。 值类型的变量直接指向存在内存中的值&#xff0c;值类型的变量的值存储在栈中。当使用 将一个变量的值赋给另一个变量时&#xff0c;如 j i ,实…

九、k8s 安全认证

文章目录1 访问控制概述2 认证管理3 授权管理4 准入控制1 访问控制概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 客户端 在Kubernetes集群中&#…

MySQL调优-深入理解MVCC机制

目录 MySQL调优-深入理解MVCC机制 MVCC多版本并发控制机制 undo日志版本链与read view机制详解 根据图2和图3对应画出下图的undo日志版本链&#xff1a; 版本链比对规则&#xff1a; 注意&#xff1a; 举例1&#xff1a;分析一下下图select1的read_view以及各个select语句…

Cadence PCB仿真使用Allegro PCB SI导入其他板卡的层叠结构的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,导入方法3,总结1,概述 本文详细介绍使用Allegro PCB SI PCB仿真软件导入其他电路板层叠结构的方法。 2,导入方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PC…

STL-vector的接口使用及模拟实现

文章目录vector类的介绍vector类的常用接口介绍 构造相关 无参构造迭代器区间构造拷贝构造 容量相关的接口 sizereserveresizecapacityempty 数据访问及遍历相关的接口 operator[]begin endrbegin rend 修改数据相关的接口 push_backpop_backinserterase vector类的模拟实现…

excel统计函数:应用广泛的动态统计之王OFFSET 下篇

【前言】在上篇文章中&#xff0c;我们了解了OFFSET函数的运算原理和各个参数的作用&#xff0c;并且我们也通过一些OFFSET的案例&#xff0c;了解了它的用途。那么本篇我们继续来看看&#xff0c;OFFSET函数在实际工作中所能起到的强大效果吧。一、高阶应用的思路&#xff08;…

vector使用指南

目录 引言 空间配置器 vector 与 string的一些差异 vector容器与string容器的一些差异 接口介绍——reserve resize接口 shrink_to_fit 接口 operator[ ] 和 at 接口 assign接口 增删查改接口 swap接口 例题讲解 引言 vector实质上就是数据结构的顺序表&#xff0…

数据结构:栈和队列(详细讲解)

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《数据结构》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我唯一…

(8)Qt中的自定义信号

目录 自定义信号需要遵循的规则 信号的发送 自定义信号的基本实现 使用一个父子窗口切换的小案例 Qt框架提供的信号在某些特定场景下是无法满足我们的项目需求的&#xff0c;因此我们还设计自己需要的的信号&#xff0c;同样还是使用connect()对自定义的信号槽进行连接。 自…

制造业ERP管理系统解决方案之销售管理

在企业的生存发展中&#xff0c;销售管理起到了重要的作用&#xff0c;它决定着企业发展的提速和效益的提升。做好销售管理工作&#xff0c;不仅可以推动企业资金有效运转&#xff0c;还可以使企业在稳定中高效发展&#xff0c;使企业价值最大化。而在制造企业销售管理中&#…

Leetcode.1658 将 x 减到 0 的最小操作数

题目链接 Leetcode.1658 将 x 减到 0 的最小操作数 题目描述 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如…