增强for循环(foreach)、可变参数(...)

简介: 格式for(元素的数据类型 变量名 :遍历的目标){ }前提只有实现了Iterable接口 的对象或者是数组对象才能使用注意的细节(区别)增强的for循环,底层还是通过获取迭代器的方式进行遍历的,只不过不需要我们手动获取迭代器而...

格式

for(元素的数据类型 变量名 :遍历的目标){

 }

前提

只有实现了Iterable接口 的对象或者是数组对象才能使用

注意的细节(区别)

  1. 增强的for循环,底层还是通过获取迭代器的方式进行遍历的,只不过不需要我们手动获取迭代器而已,所以使用增强for循环的遍历元素时,不能使用集合对象改变集合对象中的元素个数
  2. 增强for循环与迭代器的区别是:增强for循环只能用于遍历集合中的元素,不能增删元素(因为根本找不到迭代器),迭代器不仅可以遍历集合中的元素,也能增删集合中的元素
  3. 增强for循环在使用的时候必须要存在一个遍历的目标对象,而普通的for循环可以不存在遍历的目标对象
  4. 如果需要使用增强for循环遍历map集合,则需要实现entry方法,代码如下:
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class Demo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeMap<String, String> map = new TreeMap<String , String>();
        map.put("110", "张三");
        map.put("111", "李四");
        map.put("112", "王五");
        map.put("113", "陈六");
        Set<Entry<String, String>> entryes = map.entrySet();
        for(Entry<String, String> entry : entryes){
            System.out.println("键:"+entry.getKey()+" "+"值:"+entry.getValue());
        }
    }

}

自定义的类实现Iterable接口的对象 使用增强for循环

import java.util.Arrays;
import java.util.Iterator;

//自定义的类实现Iterable接口的对象是否可以使用增强for循环?
//自定义集合类
class MyList implements Iterable<String>{
    Object [] arr;
    //当前的索引值
    int index = 0;
    
    public MyList(){
        arr = new Object[10];
    }
    //自定义给数组中添加元素的方法
    public void add(Object o){
        index++;
        ensuerCaption();//检查长度
        arr[index - 1] = o;
    }
    //检查当前的长度是否够用,如果不够用的话就自动增长0.5倍
    public void ensuerCaption(){
        if(index == arr.length){
            int newLength = (int) (arr.length * 0.5);
            arr = Arrays.copyOf(arr, newLength);
        }
    }
    //实现Iterable接口中的iterator方法
    @Override
    public Iterator<String> iterator() {
        // TODO Auto-generated method stub
        return new Iterator<String>() {//使用内部类返回Iterator接口
            
            //定义一个游标
            int cursor;

            @Override
            public boolean hasNext() {
                // TODO Auto-generated method stub
                return cursor != index;
            }

            @Override
            public String next() {
                // TODO Auto-generated method stub
                return (String) arr[cursor++];
            }
        };
    }
}


public class Demo1 {

    public static void main(String[] args) {
        MyList myList = new MyList();
        myList.add("张三");
        myList.add("李四");
        myList.add("王五");
        myList.add("找刘五");
        for(String item : myList){
            System.out.println(item);
        }
    }

}

可变参数

  • 格式:
数据类型 ... 变量名
  • 注意事项:
  1. 如果一个函数的形参使用了可变参数,那么调用该函数的时候可以传递参数也可以不传递参数
  2. 可变参数实际上就是一个数组
  3. 可变参数必须位于,形参列表中最后一个位置
  4. 一个方法中最多只能使用一个可变参数(因为最后位置只有一个)
相关文章
|
存储 消息中间件 安全
构建便捷高效的宠物医疗预约服务平台:基于Spring Boot的实现
构建便捷高效的宠物医疗预约服务平台:基于Spring Boot的实现
构建便捷高效的宠物医疗预约服务平台:基于Spring Boot的实现
|
弹性计算 JSON 数据可视化
Grafana 10 新特性解读,体验与协作全面提升
Grafana 10 新特性解读:体验与协作全面提升
32332 107
|
机器学习/深度学习 人工智能 算法
通义千问Qwen-72B-Chat大模型在PAI平台的微调实践
本文将以Qwen-72B-Chat为例,介绍如何在PAI平台的快速开始PAI-QuickStart和交互式建模工具PAI-DSW中高效微调千问大模型。
|
SQL 存储 Oracle
6 张图带你彻底搞懂分布式事务 XA 模式
XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。
13620 1
6 张图带你彻底搞懂分布式事务 XA 模式
|
9月前
|
弹性计算 人工智能 数据管理
AI场景下的对象存储OSS数据管理实践
本文介绍了ECS和OSS的操作流程,分为两大部分。第一部分详细讲解了ECS的登录、密码重置、安全组设置及OSSUTIL工具的安装与配置,通过实验创建并管理存储桶,上传下载文件,确保资源及时释放。第二部分则聚焦于OSSFS工具的应用,演示如何将对象存储挂载为磁盘,进行大文件加载与模型训练,强调环境搭建(如Conda环境)及依赖安装步骤,确保实验结束后正确清理AccessKey和相关资源。整个过程注重操作细节与安全性,帮助用户高效利用云资源完成实验任务。
919 161
|
10月前
|
存储 数据安全/隐私保护
如何选择使用字节流还是字符流
在处理文件或网络数据时,选择字节流(如InputStream/OutputStream)适合处理二进制数据,而字符流(如Reader/Writer)则适用于文本数据,能自动处理字符编码问题,确保文本正确读写。选择依据主要看数据类型及是否需要编码转换。
187 3
|
10月前
|
机器学习/深度学习 消息中间件 监控
监控工具实现实时监测的方法
监控工具实现实时监测的方法
437 11
|
存储 运维 监控
如何在 Spring Boot 中设计和实现业务操作日志功能?
如何在 Spring Boot 中设计和实现业务操作日志功能?
2559 4
|
存储 监控 网络协议
I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)(下)
I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)
369 0
|
11月前
|
安全 Linux Go
Linux数据备份与恢复
Linux数据备份与恢复
290 5