单列集合顶层接口Collection及五类遍历方式(迭代器)

2024-06-16 20:52

本文主要是介绍单列集合顶层接口Collection及五类遍历方式(迭代器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

collection

add方法细节:

remove方法细节:

contains方法细节:

如果集合中存储的是自定义对象, student之类的, 也想通过contains进行判断, 就必须在javaBean中重写equals方法

contains在arrayList中源代码:在底层调用了equals方法

重写:

一些回顾equals知识:

string中equals先判断是不是字符串,不是字符串直接false;
stringbuilder中无equals,继承的是父类object中,默认比较两者地址值。

Collection遍历:普通for无法用于set类型集合(无索引)

1、迭代器遍历:不依赖索引!!!!不会出现索引越界错误

        关键词:Iterator类

next:获取对应索引的值,并将指针移到下一位

hashnext:返回布尔类型,多用于循环判断

迭代器例子:

public class diedai {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");//获取迭代器对象Iterator<String> it =list.iterator();//it.hasNext()判断该索引有无元素while (it.hasNext()){//next:获取该索引的值,将指针移到下一位String str = it.next();System.out.println(str);}}

迭代器细节:

1.报错NoSuchElementException(不依赖索引!!!!不会出现索引越界错误,会出现元素不存在错误)

2.迭代器遍历完毕,指针不会复位,除非重新创建一个迭代器

3.循环中只能用一次next方法,next调用一次指针向后移动一次,next数量都是1不会出现错误

4.迭代器遍历时,不能用集合的方法进行增加或者删除,非要删元素可以利用迭代器自己的remove方法,添加元素暂时没办法(没学到)

关于细节4:仅限迭代时!!!!

2、增强for遍历:双列集合不适用

格式:for(数据类型 变量名:遍历集合名字)

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

// 已经将当前遍历到的元素封装到变量中了,直接使用变量即可

细节:

3、lambda遍历:利用forEach方法,再结合lambda表达式的方式进行遍历

底层原理:

利用匿名内部类的形式


        其实也会自己遍历集合,依次得到每一个元素
       把得到的每一个元素,传递给下面的accept方法

例子:

    public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");//lambda完整版
//        list.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });//lambda省略版list.forEach(s-> System.out.println(s));}
}

4、三者关系

List:

特点:

特有方法:add、remove、set、get

删除方法细节:两种删除方法

记忆:当方法重载时,优先调用形参和实参数据类型相同的方法

List遍历方式:

其他的都与collection相同,分析一下列表迭代器:ListIterator

列表迭代器——可以增加元素,方法和流程和Iterator相同,默认指针指向0

五种遍历对比:迭代器(-remove),列表迭代器(+add)

这篇关于单列集合顶层接口Collection及五类遍历方式(迭代器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067526

相关文章

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red

Java文件上传的多种实现方式

《Java文件上传的多种实现方式》文章主要介绍了文件上传接收接口的使用方法,包括获取文件信息、创建文件夹、保存文件到本地的两种方法,以及如何使用Postman进行接口调用... 目录Java文件上传的多方式1.文件上传接收文件接口2.接口主要内容部分3.postman接口调用总结Java文件上传的多方式1

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如