【Java 集合进阶】单练集合顶层接口collction迭代器

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

collction的遍历方式

增强for遍历

增强for的细节

lambda表达式遍历

总结

迭代器遍历

细节注意点:


collction的遍历方式

增强for遍历

  • 增强for的底层就是迭代器,为了简化迭代器的代码书写的。
  • 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器。
  • 所有的单列集合和数组才能用增强for进行遍历。
格式:
for (元素的数据类型 变量名:数组或者集合){}
for (string s : list) {system.out.println(s);
}

增强for的细节

修改增强for中的变量,不会改变集合中原本的数据。

for (string s : list) {s = "q";
}

代码演示:

package list;import java.util.ArrayList;
import java.util.Collection;public class collection1 {public static void main(String[] args) {/* Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历增强for格式:for(数据类型 变量名: 集合/数组){}快速生成方式:集合的名字 + for 回车*///1、创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2、利用增强for进行遍历for (String s : coll) {s = "routing";}System.out.println(coll);}
}

lambda表达式遍历

得益于JDK 8开始的新技术lambda表达式,提供了一种更加简单的遍历集合的方式。

方法:
default void forEach(Consumer<? super super T> action):   //结合lambda遍历集合

代码演示:

package list;import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class collection2 {public static void main(String[] args) {/* Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历lambda表达式遍历:default void forEach(Consumer<? super T> action):*///1、创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2、利用匿名内部类的形式
/*        coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {//s依次表示集合中的每一个数据System.out.println(s);}});*///3、lambda表达式//s依次表示集合中的每一个数据coll.forEach(s ->System.out.println(s));}
}

总结

  • 1.Collection是单列集合的顶层接口,所有方法被List和Set系列集合共享

  • 2.常见成员方法

    • add、clear、remove、contains、isEmpty、size
  • 3.三种通用的遍历方式:

    • 迭代器:在遍历的过程中需要删除元素,请使用迭代器。

    • 增强for、Lambda;

    • 仅仅想遍历,那么使用增强for或Lambda表达式。

迭代器遍历

代码解释:

package list;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class collection3 {public static void main(String[] args) {/*Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历迭代器遍历相关的三个方法:Iterator<E> iterator()  :获取一个迭代器对象boolean hasNext()       :判断当前指向的位置是否有元素E next()                :获取当前指向的元素并移动指针*///1、创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");//2、获取迭代器对象//迭代器就好比一个箭头,默认指向集合0索引处Iterator<String> it = coll.iterator();//3、利用循环不断的去获取集合中的每一个元素while (it.hasNext()){//4、next方法的两件事情,获取元素并移动指针String str = it.next();System.out.println(str);}}
}

细节注意点:

1、迭代器遍历完毕,指针不会复位

2、循环中只能用一次next方法

3、迭代器遍历时,不能用集合的方法进行增加或者减少

package list;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class collection3 {public static void main(String[] args) {/*Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历迭代器遍历相关的三个方法:Iterator<E> iterator()  :获取一个迭代器对象boolean hasNext()       :判断当前指向的位置是否有元素E next()                :获取当前指向的元素并移动指针*///1、创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");//2、获取迭代器对象//迭代器就好比一个箭头,默认指向集合0索引处Iterator<String> it = coll.iterator();//3、利用循环不断的去获取集合中的每一个元素while (it.hasNext()){//4、next方法的两件事情,获取元素并移动指针String str = it.next();System.out.println(str);}System.out.println(it.hasNext());Iterator<String> it2 = coll.iterator();while (it2.hasNext()){String str2 = it2.next(); // Corrected hereSystem.out.println(str2);}}
}

package list;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class collection4 {public static void main(String[] args) {/*迭代器的细节注意点:1.报错NoSuchElementException2.迭代器遍历完毕,指针不会复位3.循环中只能用一次next方法4.迭代器遍历时,不能用集合的方法进行增加或者删除暂时当做一个结论先行记忆,在今天我们会讲解源码详细的再来分析。如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。如果我要添加,暂时没有办法。*///1.创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");coll.add("eee");//2.获取迭代器对象//迭代器就好比是一个箭头,默认指向集合的0索引处Iterator<String> it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while (it.hasNext()){//4、next方法的两件事情,获取元素,并移动指针String str = it.next();if ("bbb".equals(str)) {it.remove();}System.out.println(str);}}
}

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

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

相关文章

枚举---算法

1、定义 枚举算法&#xff1a;也称之为穷举算法&#xff0c;这种算法就是在解决问题的时候去使用所有的方式去解决这个问题&#xff0c;会通过推理去考虑事件发生的每一种可能&#xff0c;最后推导出结果。优点&#xff1a;简单粗暴&#xff0c;它暴力的枚举所有可能&#xff…

hxp CTF 2021 - A New Novel LFI(新颖的解法)

一、环境 unbentu&#xff0c;docker https://2021.ctf.link/assets/files/includers%20revenge-25377e1ebb23d014.tar.xz 二、解析 PHP Filter 当中有一种 convert.iconv 的 Filter &#xff0c;可以用来将数据从字符集 A 转换为字符集 B &#xff0c;其中这两个字符集可以…

26版SPSS操作教程(初级第十四章)

前言 #由于导师最近布置了学习SPSS这款软件的任务&#xff0c;因此想来平台和大家一起交流下学习经验&#xff0c;这期推送内容接上一次第十三章的学习笔记&#xff0c;希望能得到一些指正和帮助~ 粉丝及官方意见说明 #针对官方爸爸的意见说的推送缺乏操作过程的数据案例文件…

【嵌入式学习】FreeRTOS day04.02

一、思维导图 二、练习 1.总结任务调度算法之间的区别&#xff0c;重新实现一遍任务调度算法的代码。 调度算法&#xff1a;抢占式调度&#xff1a;优先级高的任务可以打断低优先级任务的执行&#xff0c;适用于不同优先级任务的执行。 时间片轮换&#xff1a;分配时间片&…

论文精读--GPT4

现有的所有模型都无法做到在线学习&#xff0c;能力有限&#xff0c;而让大模型拥有一个tools工具库&#xff0c;则可以使大模型变成一个交互式的工具去协调调用API完成任务&#xff0c;同时GPT4还联网了&#xff0c;可以不断地更新自己的知识库 多模态模型&#xff0c;接受文…

加密/ 解密 PDF:使用Python为PDF文档设置、移除密码

在数字化时代&#xff0c;文档的安全性变得越来越重要。特别是对于包含敏感信息的PDF文件&#xff0c;确保其不被未经授权的人员访问或修改是至关重要的。本文将介绍如何使用Python在PDF文档中设置密码&#xff0c;以及如何移除已经设置的密码。 目录 PDF加密基础知识 Pytho…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致&#xff1a; print(hello world!)另一方面&#xff0c;Python 也具有许多复杂的语法特性&#xff0c;例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

关于loop( ) 阻塞和非阻塞探究

一、SIR的补充 在上几篇博客中&#xff0c;有朋友私信问我&#xff0c;在ticker函数程序和中断服务程序&#xff08;ISR&#xff09;中写 物联网请求报错。怎么回事&#xff0c;在此解释。控制台如下 1.1解释 在使用 Ticker 函数和中断服务程序&#xff08;ISR&#xff09;时…

C++面向对象程序设计 - 访问对象中成员的3种方法

在C程序中访问对象的成员变量和成员函数&#xff0c;有三种方法&#xff1a; 通过对象名和成员运算符访问对象中的成员&#xff1b;通过指向对象的指针访问对象中的成员&#xff1b;通过对象的引用变量访问对象中的成员 在了解访问对象中成员的3种方法前&#xff0c;先了解下C…

蓝桥杯真题:单词分析

import java.util.Scanner; //1:无需package //2: 类名必须Main, 不可修改 public class Main{public static void main(String[]args) {Scanner sannernew Scanner(System.in);String strsanner.nextLine();int []anew int [26];for(int i0;i<str.length();i) {a[str.charA…

4.2 c++

#include <iostream>using namespace std; int Max10; class Stack { public:int* base;//栈底&#xff1b;int* top;//栈顶&#xff1b;void creat(Stack& s);//初始化顺序栈void in(Stack& s);//入栈void out(Stack& s);//出栈void empty(Stack& s);//…