当前位置: 首页 > news >正文

java基础 之 常用遍历方法

文章目录

  • 准备工作
  • 一、普通遍历循环
  • 二、增强for
  • 三、forEach
  • 四、迭代器
  • 五、总结
  • 六、代码奉上

准备工作

准备工作:我们需要创建一个数组,两个列表,一个字符串和一个set集合,如下图所示
在这里插入图片描述

一、普通遍历循环

  • 说明:
    • 1、使用普通for循环我们需要先知道对应的数组或者列表的长度
    • 2、使用普通for循环,可以查询,可以修改,但是不可以删除
  • 语法格式:
    在这里插入图片描述
  • 代码使用:
    在这里插入图片描述

二、增强for

  • 说明

    1、增强for不需要知道遍历对象的长度
    2、只能遍历数组或其他实现了Iterable接口的集合。遍历时关心数据类型。需要如果列表和集合中数据类型不一致,遍历时需要设置成Object
    3、遍历字符串,不能直接使用增强for(因为没实现Iterable接口),可以将字符串转成列表后再使用增强for
    在这里插入图片描述
    4、只能查询数据,不能修改数据,是最简单且最具可读性的遍历数组方式
    5、如果列表中数据类型是一个类对象,是可以对类对象的属性进行修改

  • 语法格式:
    在这里插入图片描述

  • 代码使用:
    在这里插入图片描述

三、forEach

  • 说明:

    1、不需要知道遍历对象的长度
    2、Java 8引入的Stream API中的forEach方法,所以java版本至少是1.8
    3、不关心数组和集合中的元素类型
    4、使用条件:实现了Iterable接口的集合

  • 语法格式:
    在这里插入图片描述
  • 代码使用在这里插入图片描述

四、迭代器

  • 说明:

    1、是一种用于遍历集合(如列表、集合和映射等)的接口
    2、只能从前往后遍历集合中的元素,不能往回遍历
    3、不关心数据的类型

  • 常用的方法:
    • next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置
    • hasNext() - 用于判断集合中是否还有下一个元素可以访问
    • remove() - 从集合中删除迭代器最后访问的元素(可选操作)
  • 代码使用在这里插入图片描述

五、总结

数组单一类型的列表泛型的列表字符串set集合
普通for循环支持支持支持支持不支持
增强for支持支持支持不支持支持
forEach支持支持支持不支持支持
Iterator不支持支持支持不支持支持

普通for循环需要知道遍历的数组/列表的长度,其他不需要
增强for只支持遍历数组和数据为单一类型的列表
增强for、forEach、Iterator遍历的数据需实现Iterator接口
forEach需要的jdk版本应大于或等于1.8
forEach速度相比其他来说慢,不建议使用

六、代码奉上

import java.util.*;public class For {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9,10};      // 创建数组arrList<Integer> list = new ArrayList<>(); // 创建列表list// 对列表list添加类型为Integer的数据list.add(10);list.add(20);list.add(30);list.add(40);list.add(50);list.add(60);list.add(70);list.add(80);list.add(90);list.add(100);List list1 = new ArrayList<>();     // 创建泛型列表list1list1.add("abc");list1.add(123);list1.add('a');list1.add(true);list1.add(arr);// 对列表list1添加不同类型的数据:String str = "helloWorld";      // 创建字符串strSet set = new HashSet<>();  // 创建集合泛型集合setset.add(1);set.add("b");set.add('c');set.add(100);set.add("java");set.add(true);    // 对集合set添加数据/**  普通for循环  **/// 遍历数组for(int i=0;i<arr.length;i++){arr[i]+=100;  // 可以在此处对遍历的数据进行修改System.out.print(arr[i]+" ");   // 修改后的数据打印为:101 102 103 104 105 106 107 108 109 110}System.out.println();// 遍历列表(不关心列表中数据的类型)for (int i=0;i<list.size();i++){        // list1遍历相同,只需把列表名称修改即可list.set(i,10*i);  // 可以在此处对遍历的数据进行修改System.out.print(list.get(i)+" ");  // 修改后的数据打印为:0 10 20 30 40 50 60 70 80 90}System.out.println();// 遍历字符串for(int i=0;i<str.length();i++){if(str.charAt(i) == 'l'){   // 如果遍历的字符是'l',则将它改成'A'str = str.replace('l','A');}System.out.print(str.charAt(i)+" ");    // 修改后的数据打印:h e A A o W o r A d}// 遍历set集合 :不支持/**  增强for  **/// 遍历数组for(int i:arr){System.out.print(i+" ");  // 打印结果:1 2 3 4 5 6 7 8 9 10}System.out.println();// 关心列表中数据的类型,所以如果不一致的时候,需要使用Objetc,否则报错for(Object o:list1){System.out.print(o+" ");    // 打印结果:abc 123 a true [I@677327b6}System.out.println();// 遍历字符串,需要将字符串转成字符数组才可以遍历for(char c: str.toCharArray()){ // 可以将字符串转换成列表,然后用增强for遍历System.out.print(c+" ");    // 打印结果:h e l l o W o r l d}System.out.println();// 遍历set集合for(Object o:set){System.out.print(o+" ");    // 打印结果:1 b c java 100 true}/** forEach**/// 遍历数组:不支持// 遍历列表list1.forEach(item ->{System.out.print(item+" ");     // 打印结果:abc 123 a true [I@3d075dc0});System.out.println();// 遍历字符串:不支持// 遍历setset.forEach(item ->{System.out.print(item+" ");     // 打印结果:1 b c java 100 true});/** Iterator**/// 遍历数组:需要将数组转为可以迭代的列表Iterator iterator = Arrays.stream(arr).iterator();  // 注意:Arrays.toList(arr).iterator() 打印出来不可迭代while(iterator.hasNext()){System.out.print(iterator.next()+" ");  // 打印结果: 1 2 3 4 5 6 7 8 9 10}System.out.println();// 遍历列表Iterator iterator1 = list1.iterator();while(iterator1.hasNext()){System.out.print(iterator1.next()+" ");  // 打印结果:abc 123 a true [I@677327b6}System.out.println();// 遍历字符串:不支持。但是可以先将字符串转为char[] 数组,然后转为列表,再迭代的间接方式// 遍历集合Iterator iterator2 = set.iterator();while(iterator2.hasNext()){System.out.print(iterator2.next()+" ");  // 打印结果:1 b c java 100 true}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring DI 数据类型—— set 方法注入
  • 达梦数据库的系统视图v$db_cache
  • Elasticsearch DSL 语法详解
  • 【Qt】输入类控件QLineEdit
  • 电连接器的质量等级选择
  • 通用人工智能不应该完全以人类为标准
  • Adobe After Effects的插件--------CC Cylinder
  • ESP32 分区表介绍
  • 通配符证书:轻松管理您的子域名安全
  • Java中实现一个定时任务并在特定时刻弹出窗口提醒用户需要放松休息
  • 大模型19:微调大模型方法
  • 《黑神话.悟空》:一场跨越神话与现实的深度探索
  • RTC时钟测试
  • C# Queue 队列
  • 【RabbitMQ】高级特性
  • 深入了解以太坊
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C++11: atomic 头文件
  • canvas 高仿 Apple Watch 表盘
  • Github访问慢解决办法
  • IP路由与转发
  • js中forEach回调同异步问题
  • overflow: hidden IE7无效
  • Swift 中的尾递归和蹦床
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 力扣(LeetCode)56
  • 树莓派 - 使用须知
  • 探索 JS 中的模块化
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​520就是要宠粉,你的心头书我买单
  • ​虚拟化系列介绍(十)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (3)(3.5) 遥测无线电区域条例
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)Linux——Linux常用指令
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (过滤器)Filter和(监听器)listener
  • (十六)一篇文章学会Java的常用API
  • (四) 虚拟摄像头vivi体验
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)shell调试方法
  • (转)大道至简,职场上做人做事做管理
  • (转)用.Net的File控件上传文件的解决方案
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net 8.0 新的变化
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET IoC 容器(三)Autofac
  • .NET 反射 Reflect
  • .NET 解决重复提交问题
  • .net 生成二级域名