Java集合系列—Collection系列集合遍历方式(详解并附有代码案例)

本文主要是介绍Java集合系列—Collection系列集合遍历方式(详解并附有代码案例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Collection遍历方式
      • 18.2.1 迭代器遍历
      • 18.2.2 增强for遍历
      • 18.2.3 Lambda表达式遍历
      • 18.2.4 三种通用遍历方式区别

Collection遍历方式

  • Collection 是单列集合的顶层接口(祖宗接口),它的功能是全部单列集合都可以继承使用的,所以Collection 里面是一些共性的方法。
  • Collection 所有方法被List 和 Set系列集合共享

18.2.1 迭代器遍历

迭代器不依赖索引

迭代器在Java中的类Iterator,迭代器是集合专用的遍历方式。

Collection集合获取迭代器:

方法名称说明
Iterator iterator返回迭代器对象,默认指向当前集合的0索引

Iterator 中常用方法:

方法名称说明
boolean hasNext( )判断当前位置是否有元素,有返回ture,没有返回fasle
E next( )获取当前位置的元素,并将迭代器对象移向下一个位置

注意细节:

1.报错NoSuchElementException

2.迭代器遍历完毕,指针不会复位

3.循环中只能用一次next方法

4.迭代器遍历过程中,不能用集合的方法进行增加或者删除,如果要删除可以用迭代器里的remove方法进行删除,(目前无法添加)

public class Test {public static void main(String[] args) {/*迭代器遍历相关的三个方法:Iterator<E> iterator()  :获取一个迭代器对象boolean hasNext()       :判断当前指向的位置是否有元素E next()                :获取当前指向的元素并移动指针*/// 1.创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("你");coll.add("好");coll.add("啊");// 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.next());//报错:NoSuchElementException// 迭代器遍历完毕,指针不会复位//如果要继续第二次遍历,只能再此获取一个新的迭代器对象Iterator<String> it2= coll.iterator();while (it2.hasNext()){String str = it2.next();System.out.print(str);}}
}
public class Test02 {public static void main(String[] args) {//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();if ("bbb".equals(str)){//coll.remove("bbb");此行不可取,因为不能通过集合里的方法删除it.remove();}}System.out.println(coll);//[aaa, ccc]}
}

18.2.2 增强for遍历

  • 增强for的底层就是迭代器,简化迭代器的代码书写
  • JDK5之后,其内部原理就是一个Iterator迭代器
  • 所有单列集合和数组才能用增强for进行遍历

格式:

for(元素的数据类型 变量名:数组或者集合){}
如:for(String s:list){sout(s);}
public static void main(String[] args) {// 创建集合并添加数据Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");// s其实就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据for (String s : coll) {System.out.println(s);//aaa  bbb  ccc}for (String s : coll) {s = "ddd";}System.out.println(coll);//[aaa, bbb, ccc]

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

18.2.3 Lambda表达式遍历

JDK8开始新的技术Lambda表达式,提供了一种更简单直接的遍历集合方式。

方法名称说明
deafult void forEach(Consumer<? super T> action):结合lambda遍历集合
public class Test01 {public static void main(String[] args) {// 1.创建集合并添加数据Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");// 2.利用匿名内部类的形式//forEach底层原理:也会自己通过普通for循环遍历集合,依次得到每一个元素//把得到的每一个元素,传递给下面的accept方法// s 表示集合中的每一个数据// coll.forEach(new Consumer<String>() {//     @Override//     public void accept(String s) {//         System.out.println(s);//     }// });// 利用匿名内部类改成 lambda表达式:coll.forEach((String s) ->{System.out.println(s);//aaa  bbb  ccc});// 简化lambda表达式coll.forEach(s ->System.out.println(s));//aaa  bbb ccc}
}

18.2.4 三种通用遍历方式区别

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

增强for、Lambda:仅想遍历输出,就选这俩

这篇关于Java集合系列—Collection系列集合遍历方式(详解并附有代码案例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置