1 Collection集合的遍历

1.1 迭代器

1.内容

  • public Iterator iterator():
  • E next():获取下一个元素值
  • boolean hasNext():判断是否有下一个元素,有返回true,没有返回false
  1. 代码
public class CollectionDemo01 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);

        //1.得到集合的迭代器对象
        Iterator<String> it = lists.iterator();
        //String ele = it.next();
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());
        //System.out.println(it.next());//如果第五个,就会出现NoSuchElementException没有此元素异常

        //2.使用while循环
        while (it.hasNext()){
            String ele = it.next();
            System.out.println(ele);
        }
    }
}

1.2 增强for循环

  1. 内容
  • 增强for循环遍历的关键是记住格式
  • for(被遍历集合或者数组中元素的类型 变量名称:被遍历集合或者数组){}
  • 注:无法知道是遍历到了哪个元素了,因为没有索引。
  1. 代码
public class CollectionDemo02 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);

        for(String x:lists){//x就像游标一样//快捷方式:lists.for
            System.out.println(x);
        }

        int[] ages = new int[]{17,18,38,21};
        for (int x : ages) {
            System.out.println(x);
        }
    }
}

1.3 Lambda表达式

  1. 内容
  • lists.forEach(x->{
    System.out.println(x);
    });
  1. 代码
public class CollectionDemo03 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);

	lists.forEach(new Consumer<String>() {///Consumer也是一个接口,用的Comsumer接口进行遍历的
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        //简化匿名内部类
        lists.forEach((String s)->{
                System.out.println(s);
        });
        
        //简化类型
        lists.forEach((s)->{
            System.out.println(s);
        });
        
        //简化小括号,因为只有一个参数
        lists.forEach(s->{
            System.out.println(s);
        });
        
        //简化大括号和;,因为只有一行代码
        lists.forEach(s->
            System.out.println(s)
        );
        
        //方法引用再次简写,这也太装了
        lists.forEach(System.out::println);
    }
    }
}

2 List集合的遍历方式

2.1 for循环

  1. 内容
    因为list集合有索引,因此可以通过索引取值,用size确定大小,用get取值
  2. 代码
public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");


        for(int i = 0;i<lists.size();i++){
            String ele = lists.get(i);
            System.out.println(ele);
        }
}

2.2 迭代器

  1. 内容:同Collection遍历
  2. 代码
public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");

        Iterator it = lists.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
}

2.3 增强for循环

  1. 内容:同Collection遍历
  2. 代码
public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");

        for(String x:lists){
            System.out.println(x);
            }
}

2.4 Lambda表达式

  1. 内容:同Collection遍历
  2. 代码
public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");


        lists.forEach(s->{
            System.out.println(s);
        });
}

3 Set集合的遍历方式

HashSet,因为没索引,无序,不重复,因此没有List的的第一种for循环
其他的LinkedHashSet,TreeSet略

4 Map集合的遍历

主要讲HashMap的

4.1 键找值

  1. 内容
  • 先获取Map集合的全部键的Set集合
  • 遍历键的Set集合,通过键找值
  1. 代码
public static void main(String[] args) {
        Map<String, Integer> maps = new HashMap<>();
        maps.put("娃娃",1);
        maps.put("口红",2);
        maps.put("散粉",3);
        maps.put("剃须刀",4);
        maps.put("肥皂盒",4);
        maps.put("洗洁精",5);
        maps.put("洗衣液",6);
        System.out.println(maps);


        //a.先获取Map集合的全部键的Set集合
        Set<String> keys = maps.keySet();
        //b.通过遍历键然后通过键取对应的值
        for (String key : keys) {
            System.out.println(key+"="+maps.get(key));
        }
}

4.2 键值对

  1. 内容
  • 把Map集合转换成Set集合
  • 此时键值对元素的类型就确定了,类型是键值对实体类型
  • 接下来就可以用foreach遍历这个Set集合
  1. 代码
public static void main(String[] args) {
        Map<String, Integer> maps = new HashMap<>();
        maps.put("娃娃",1);
        maps.put("口红",2);
        maps.put("散粉",3);
        maps.put("剃须刀",4);
        maps.put("肥皂盒",4);
        maps.put("洗洁精",5);
        maps.put("洗衣液",6);
        System.out.println(maps);

    //2.键值对的遍历:更加面向对象的方式,代码有点复杂,不过问题不大
         //思想:直接把键值当作一个整理取遍历,但是增强for循环不能遍历Map集合
         // 因此通过Set<Map.Entry<K,V>>转成Set集合中的键值对实体类型从而让for遍历,就是使用maps.entrySet(),再用Set<>中的Map实体类型接收
        Set<Map.Entry<String, Integer>> entries = maps.entrySet();
        //这样就能遍历了!
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry);
        }
}

4.3 Lambda表达式

  1. 内容:很简洁
  2. 代码
public static void main(String[] args) {
        Map<String, Integer> maps = new HashMap<>();
        maps.put("娃娃",1);
        maps.put("口红",2);
        maps.put("散粉",3);
        maps.put("剃须刀",4);
        maps.put("肥皂盒",4);
        maps.put("洗洁精",5);
        maps.put("洗衣液",6);
        System.out.println(maps);

        maps.forEach((k,v)->{
            System.out.println(k+"=>"+v);
        });
    }
}