java中容器继承体系

首先上图

 

源码解析 

打开Collection接口源码,能够看到Collection接口是继承了Iterable接口。

public interface Collection<E> extends Iterable<E> {
    /**
     * ......
     */
}
 

 以下是Iterable接口源码及注释

/**
 * Implementing this interface allows an object to be the target of the "for-each loop" statement.
 * 实现这个接口允许一个对象成为for-each循环语句的目标
 */
public interface Iterable<T> {
    // 返回一个内部元素为T类型的迭代器(JDK1.5只有这个接口)
    Iterator<T> iterator();
    
    // 遍历内部元素,action意思为动作,指可以对每个元素进行操作(JDK1.8添加)
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    
    // 创建并返回一个可分割迭代器(JDK1.8添加),分割的迭代器主要是提供可以并行遍历元素的迭代器,可以适应现在cpu多核的能力,加快速度。
    //(划重点:并行遍历元素 并行!)
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}
 

Iterable接口定义了三个方法,其中两个提供了默认实现,只有iterator()是要求实现类必须实现的方法。
那么当某个类实现了Iterable接口就可以使用foreach进行迭代。同时Iterable中又封装了Iterator接口,那么这个类也可以使用Iterator迭代器。
因而有三种方式可以迭代Iterable实现类的对象:
1、for-each循环

List<String> list = new ArrayList><();
list.add("AAA");
list.add("BBB");
list.add("CCC");
for( String element : list ){
    System.out.println( element.toString() );
}
 

2、获取Iterable实现类对象的迭代器(Iterator)

Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
    String element = iterator.next();
    System.out.println( element );
}
 

3、调用IterableforEach()方法

list.forEach( (element) -> {
    System.out.println( element );
});
 

 Iterator

通过上面我们可以看到,在iterable中我们有一个方法iterator可以返回一个Iterator的类。这个类的作用就是实现迭代。下面我们来看一下这个类的方法以及继承体系。

虽然在架构层级中并未包含,Iterator接口(迭代器)也是集合大家庭中的一员。Iterator主要是为了方便遍历集合中的所有元素(相当于是定义了遍历元素的范式)。

iterator源码

public interface Iterator<E> {
    // 是否有下一个元素
    boolean hasNext(); 
    
    // 获取下一个元素
    E next();   
    
    // 移除元素
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
        
    // 对剩下的所有元素进行处理,action则为处理的动作,意为要怎么处理
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
        action.accept(next());
    }
}
 

同样Iterator也是一个接口,目的是在于把不同集合的遍历方式抽象出来,这样我们使用迭代器遍历的时候,就不需要关注于集合内部结构,能够使用Iterator的内部方法直接遍历(也就是说,不管是针对List还是Set的遍历,我们都能够直接使用Iterator遍历拿到集合元素,而不需要关心是List还是Set)。那么这个时候,如果使用的数据结构有所变化,我们不需要去维护原有遍历集合的代码,因此也可以理解Iterator是有将集合与集合的遍历做了一个解耦。

Iterable Iterator两兄弟的区别

Iterable接口是为了达到实现该接口的类,可以使用foreach循环的目的。
Iterator接口是基于迭代器模式,实现了对聚合类的存储和遍历的分离。
两者所强调的内容不同:

Iterable接口强调的是实现Iterable接口可使用foreach语法遍历,也可以使用迭代器遍历。
Iterator接口强调其实现类可使用迭代器遍历

参考链接:https://blog.csdn.net/weixin_45663027/article/details/134135420

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

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

相关文章

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…

Project_Euler-13 题解

Project_Euler-13 题解 题目 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 2306758820753934617117198…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

超声波气泡传感器检测原理

超声气泡传感器 超声波气泡传感器利用超声波在液体和气体中的声阻抗不同的原理来实现对气泡或液体的识别和检测。它具有体积小、重量轻、使用寿命长、检测灵敏度高、响应速度快等优点&#xff0c;广泛应用于医疗、化工、食品和环保等领域。 检测原理&#xff1a; 超声波气泡…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

【网络那些事】

【云计算】 云计算&#xff1a;把计算资源放在某个地方&#xff0c;并通过互联网暴露出来&#xff0c;让用户可以按需使用计算资源的方式&#xff0c;就是所谓的云计算 云计算的三种服务&#xff1a; 云平台专业名词 日常叫法 亚马逊云叫法 虚拟机 EC2 &#xff08;Elasti…

GPT润色指令

1. GPT润色指令 Below is a paragraph from an academic paper. Polish the writing to meet the academic style,improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. Paragraph &#xff1a;你的句子…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

Apache-Camel中的Quartz定时任务

需求&#xff1a;在camel的基础上增加两个定时任务&#xff0c;一个需要发邮件&#xff0c;一个只需要简单调用存储过程并拿回数据记录日志即可 package com.hkt.it.ds.dmg.eip.route;import java.util.List;import com.xxx.DmgCamelRouteConfig; import com.xxx.DmgCamelRout…

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

【加密算法】AES对称加密算法简介

目录 前言 工作原理 SubBytes ShiftRows MixColumns AddRoundKey 应用场景 在Java中使用AES 加密和解密数据 注意事项和最佳实践 结论 前言 AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它在密码学中被广泛应用。AES取代…

如何将本地项目上传到github上

将本地项目上传到github上有很多种方法&#xff0c;这里只讲述我认为最简单快捷的一种&#xff0c;先在github中创建一个仓库&#xff0c;接着在本地建文件夹&#xff0c;用命令行将项目推送到本地仓库&#xff0c;然后连接远程仓库&#xff0c;将本地项目推送到远程仓库上。要…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型&#xff0c;而是一类模型&#xff0c;这一类模型用来判断变量之间是否具有相关性。一般来说&#xff0c;分析两个变量之间是否具有相关性&#xff0c;我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 &#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. UUID&#xff08;Universally …

开发者利器: 从 Amazon CodeWhisperer 到 Amazon Q

自 ChatGPT 火爆以来&#xff0c;生成式 AI 助手也是层出不穷&#xff0c;目前自然是以 Microsoft Copilot&#xff08;基于 GPT&#xff09;普及度最高了吧。看着微软风光了这么久&#xff0c;其他云厂商怎么可能会甘愿落后&#xff1f; 最近&#xff0c;来自亚马逊云科技的 …

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用&#xff0c;所以开通内网DNS解析服务后&#xff0c;默认不会主动开启流量分析&#xff0c;需要您手动开启流量分析。对于未开启流量分析的用户&#xff0c;进入界面会提示您展示的都是模拟数据&#xff0c;您可以点击开启流量分析服务&#xff…

B站项目-基于Pytorch的ResNet垃圾图片分类

基于Pytorch的ResNet垃圾图片分类 项目链接 数据集下载链接 1. 数据集预处理 1.1 画图片的宽高分布散点图 import osimport matplotlib.pyplot as plt import PIL.Image as Imagedef plot_resolution(dataset_root_path):image_size_list []#存放图片尺寸for root, dirs, fi…

实验室储样瓶耐强酸强碱PFA材质试剂瓶适用新材料半导体

PFA&#xff0c;全名可溶性聚四氟乙烯&#xff0c;试剂瓶又叫取样瓶、样品瓶、广口瓶、储样瓶等。主要用于痕量分析、同位素分析等实验室&#xff0c;广泛应用于新兴的半导体、新材料、多晶硅、硅材、微电子等行业。 规格参考&#xff1a;30ml、60ml、100ml、125ml、250ml、30…