迭代器
迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
迭代器(Iterator)是一种用于遍历集合(如数组、列表、字典等)中元素的对象,它就像一个光标,指向集合中的一个元素,我们可以通过调用迭代器的方法来遍历下一个元素,以此类推。
Collection集合获取迭代器的方法
Iterator迭代器中的常用方法
增强for
为什么不用普通for呢?
如果你要用for循环遍历集合,那么这个集合必须支持索引,但Collection并没有规定集合的索引问题,只有List集合系列才支持索引,所以Collection集合是不支持直接用for循环来遍历的。
其他集合接口的实现类,例如Set和Map,不支持直接使用索引来访问元素。这是因为这些集合是基于不同的数据结构实现的,按照键或者其他规则进行存储和访问。
对于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<>();
}
}
运行结果: