集合框架:Collection的遍历方式(迭代器,增强for,lambda表达式)

迭代器

迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。 

迭代器(Iterator)是一种用于遍历集合(如数组、列表、字典等)中元素的对象,它就像一个光标,指向集合中的一个元素,我们可以通过调用迭代器的方法来遍历下一个元素,以此类推。

Collection集合获取迭代器的方法

Iterator迭代器中的常用方法

增强for

为什么不用普通for呢?

如果你要用for循环遍历集合,那么这个集合必须支持索引,但Collection并没有规定集合的索引问题,只有List集合系列才支持索引,所以Collection集合是不支持直接用for循环来遍历的。

其他集合接口的实现类,例如SetMap,不支持直接使用索引来访问元素。这是因为这些集合是基于不同的数据结构实现的,按照键或者其他规则进行存储和访问。

对于Set集合,我们可以使用Iterator或者增强的for-each循环来遍历元素。

对于Map集合,我们可以使用键来获取对应的值

lambda表达式

在Java 8中,引入了Lambda表达式的概念,它可以用来创建函数式接口(Functional Interface)的匿名方法。Lambda表达式在Java中的语法如下:

```
(parameter list) -> {lambda body}
```

其中,parameter list是方法参数列表,可以是空的或包含一个或多个参数;lambda body是执行的逻辑语句块。

Lambda表达式用于代替匿名内部类,常用于函数式编程和集合的运算中,例如对集合进行筛选、映射、排序等。

下面是一个简单的示例,比较两个字符串的长度:

```java
Comparator<String> comparator = (String s1, String s2) -> {
    int length1 = s1.length();
    int length2 = s2.length();
    return Integer.compare(length1, length2);
};
```

在上面的示例中,`(String s1, String s2)`是参数列表,`int length1 = s1.length(); int length2 = s2.length(); return Integer.compare(length1, length2);`是Lambda表达式的执行体,`Integer.compare(length1, length2)`表示比较两个字符串的长度。

Lambda表达式可以简化代码,并使代码更加具有可读性和简洁性。它是Java 8引入的重要特性,也是函数式编程在Java中的一种实现方式。

练习代码

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;

public class Test {
    public static void main(String[] args) {
        Collection<String> ct = new ArrayList<>();
        ct.add("java1");
        ct.add("java2");
        ct.add("java3");
        ct.add("java4");
        System.out.println(ct);

        //使用迭代器遍历集合
        //1、从集合对象中获取迭代器对象
        Iterator<String> it = ct.iterator();

          //手工遍历,实用性不高
//        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());  //多打一行会报错

        //2、使用循环结合迭代器遍历集合。
        while (it.hasNext()){     // hasNext()问一问当前位置有没有数据,有的话返回true
            String ele = it.next();   //取出来并且把迭代器移动到下一个位置
            System.out.println(ele);
        }
        System.out.println("-----------------");

        //使用增强for遍历集合或数组
//        for(String ele : ct){   //集合
//            System.out.println(ele);
//        }
        //快速写法 : ct.for 回车
        for (String s : ct) {
            System.out.println(s);
        }
        System.out.println("-----------------");

        String[] arr = {"aaa","bbb","ccc"};
        for(String arri : arr){    //数组
            System.out.println(arri);
        }
        System.out.println("-----------------");

        // default void forEach(Consumer<? super T> action):结合Lambda表达式遍历集合
        //ct.forEach(s -> System.out.println(s));
        ct.forEach(System.out::println );

        //ArrayList<String> arrayList = new ArrayList<>();

    }
}

运行结果:

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值