java基础 之 常用遍历方法

news2024/11/24 6:48:01

文章目录

  • 准备工作
  • 一、普通遍历循环
  • 二、增强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};      // 创建数组arr
        List<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<>();     // 创建泛型列表list1
        list1.add("abc");list1.add(123);list1.add('a');list1.add(true);list1.add(arr);// 对列表list1添加不同类型的数据:

        String str = "helloWorld";      // 创建字符串str
        Set set = new HashSet<>();  // 创建集合泛型集合set
        set.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();
        // 遍历字符串:不支持
        // 遍历set
        set.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
        }
    }
}

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

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

相关文章

吴恩达机器学习课后题-02逻辑回归

逻辑回归 逻辑回归基本知识点&#xff1a;分类Cost function(代价函数)梯度下降 题目线性可分散点图决策边界 线性不可分题目特征映射代价函数&#xff08;损失函数&#xff09;梯度下降结果 逻辑回归基本知识点&#xff1a;分类 Cost function(代价函数) 梯度下降 题目 线性可…

Upload-Lab第16关:巧妙利用图片马方式绕过exif_imagetype验证

简介 在第16关中,解决方法与第14和第15关类似,都是通过修改文件头来绕过文件上传验证。然而,第16关额外使用了 php_exif模块对文件进行校验。因此,在尝试解决这一关时,需要确保php_exif模块已启用,如下图所示: php_exif.dll–找不到指定的模块 要想php_exif能够被成功…

Github 2024-08-22 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1精选Go框架、库和软件列表 创建周期:3700 天开发语言:Go协议类型:MIT LicenseStar数量:127377 个Fork数量:11751 …

ardupilot开发 --- C嘎嘎 篇

无情的猜猜猜又卜了一挂 cout和cin的使用&#xff0c;标准输入输出<< 和 >> 的使用数据类型&#xff08;函数&#xff09;模板的使用&#xff1a;命名空间的使用&#xff0c;std命名空间语句块new 的使用引用 &共用体union类对象的赋值&#xff1a;operator函数…

实现 FastCGI

CGI的由来&#xff1a; 最早的 Web 服务器只能简单地响应浏览器发来的 HTTP 请求&#xff0c;并将存储在服务器上的 HTML 文件返回给浏 览器&#xff0c;也就是静态 html 文件&#xff0c;但是后期随着网站功能增多网站开发也越来越复杂&#xff0c;以至于出现动态技 术&…

仿Muduo库实现高并发服务器——Connection模块

这个模块看着代码挺多的实则真的很多&#xff0c;但是不难&#xff0c;我为大家将各个函数拿出来理一理。 connection就是将主线程监听的网络套接字上的客户端套接字进行包装&#xff0c;使被包装的套接字可以进行&#xff0c;各种事件的处理&#xff0c;比如读写事件。下面就来…

3D场景标注标签信息,three.js CSS 2D渲染器CSS2DRenderer、CSS 3D渲染器CSS3DRenderer(结合react)

如果你想用HTML元素作为标签标注三维场景中模型信息&#xff0c;需要考虑定位的问题。比如一个模型&#xff0c;在代码中你可以知道它的局部坐标或世界坐标xyz&#xff0c;但是你并不知道渲染后在canvas画布上位置&#xff0c;距离web页面顶部top和左侧的像素px值。自己写代码把…

探秘黑魔术玫瑰:花语与魅力的交织

一、黑魔术玫瑰的花语解读 黑魔术玫瑰的花语丰富而深邃&#xff0c;充满了神秘与诱惑。在许多文化中&#xff0c;其深沉的颜色被赋予了神秘的象征意义&#xff0c;代表着那些尚未被揭示的秘密和未知的领域。它仿佛是隐藏在黑暗中的谜题&#xff0c;吸引着人们去探索和追寻。 禁…

plsql表格怎么显示中文 plsql如何导入表格数据

在Oracle数据库开发中&#xff0c;PL/SQL Developer是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时&#xff0c;许多用户会遇到表格显示中文的问题&#xff0c;以…

DRF——请求的封装与版本管理

文章目录 django restframework1. 快速上手2. 请求数据的封装3. 版本管理3.1 URL的GET参数传递&#xff08;*&#xff09;3.2 URL路径传递&#xff08;*&#xff09;3.3 请求头传递3.4 二级域名传递3.5 路由的namespace传递 小结 django restframework 快速上手请求的封装版本…

SQL,解析 json

Google BigQuery数据库的data表存储了若干多层的Json串&#xff0c;其中一条形如&#xff1a; [{"active":true,"key":"key1","values":[{"active":true,"value":"value1"}]},{"active":tru…

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…

Golang | Leetcode Golang题解之第363题矩形区域不超过K的最大数值和

题目&#xff1a; 题解&#xff1a; import "math/rand"type node struct {ch [2]*nodepriority intval int }func (o *node) cmp(b int) int {switch {case b < o.val:return 0case b > o.val:return 1default:return -1} }func (o *node) rotate…

算法日记day 44(动归之编辑距离|回文字串|最长回文子序列)

一、编辑距离 题目&#xff1a; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 "…

WEB渗透免杀篇-cshot远程shellcode

往期文章 WEB渗透免杀篇-免杀工具全集-CSDN博客 WEB渗透免杀篇-加载器免杀-CSDN博客 WEB渗透免杀篇-分块免杀-CSDN博客 WEB渗透免杀篇-Powershell免杀-CSDN博客 WEB渗透免杀篇-Python源码免杀-CSDN博客 WEB渗透免杀篇-C#源码免杀-CSDN博客 WEB渗透免杀篇-MSFshellcode免杀…

基于.net技术的物业管理系统需求分析与设计

系统需求分析 2.1 整体需求概述 根据某XXXXXXXX管理公司实际业务调研分析&#xff0c;可将其系统需求划分为7个部分&#xff1a;基础信息维护、网上报修、权限管理、动力消耗、物料管理、收费管理、报表分析。 2.1.1 基础信息维护 基础信息维护包括对以下业务基础数据的采集…

linux驱动——设备树

1&#xff1a;初识设备树 1.1 什么是设备树&#xff0c;设备树的意义 设备树&#xff08;Device Tree&#xff09;是 Linux 内核中用于描述硬件设备的一种数据结构。它为操作系统提供了一种抽象的方法&#xff0c;使其能够识别和配置硬件设备&#xff0c;而无需将硬件细节硬编…

QT-五子棋游戏

QT-五子棋游戏 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "GameModel.h" #include <time.h> #include <stdlib.h>GameModel::GameModel(){}void GameModel::startGame(GameType type){gameType type;//初始化棋盤game…

【备忘录模式】设计模式系列:掌握状态回溯的艺术(设计详解)

文章目录 备忘录设计模式详解引言1. 设计模式概述2. 备忘录模式的基本概念2.1 备忘录模式的定义2.2 备忘录模式的关键角色 3. 备忘录模式的实现原理3.1 备忘录模式的工作流程3.2 模式的优缺点分析3.3 与其他模式的对比 4. 实际案例分析4.1 游戏状态保存与恢复4.2 文档编辑器撤销…

19529 照明灯安装

### 详细分析 这个问题可以通过二分查找和贪心算法来解决。我们需要找到一个最大值&#xff0c;使得在这个最大值下&#xff0c;能够在给定的坐标上安装 k 个照明灯&#xff0c;并且相邻的照明灯之间的距离至少为这个最大值。 ### 思路 1. **排序**&#xff1a;首先对给定的…