美文网首页
增强for循环(foreach)、可变参数(...)

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

作者: 全满 | 来源:发表于2018-06-17 21:48 被阅读0次

    格式

    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. 一个方法中最多只能使用一个可变参数(因为最后位置只有一个)

    相关文章

      网友评论

          本文标题:增强for循环(foreach)、可变参数(...)

          本文链接:https://www.haomeiwen.com/subject/yszweftx.html