Java集合遍历

集合的遍历

使用Iterator

Iterator主要用于遍历集合中的Collection元素,因此Iterator创建的对象是一个迭代器。


Iterator提供的四个方法

  • boolean hasNext(): 如果迭代器的集合还没有被遍历完,返回ture。
  • Object next():返回集合里的下一个元素。
  • void remove():删除集合里上一次next方法返回的元素。
  • void forEachRemaining(Consumer action):这个是java 8为Iterator新增的默认方法,该方法可使用Lambda表达式遍历所有的集合元素。

next方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by 晓辉 on 2016/5/23.
* 使用jdk8中的iterator遍历集合;
*/
public class IteraorTest {
public static void main(String[] args) {
List books=new ArrayList<>();
books.add("fengk");
books.add("niaho");
Iterator it=books.iterator();
while (it.hasNext()){
it.next();
if(books.equals("fengk")){
it.remove();
}
System.out.println(it.next());
}
}
}
> 输出结果
>niaho

Iterator只用于遍历集合,本身本身并不具有承装对象的能力。如果需要就要创建Iterator对象,则必须有一个被迭代的集合。Iterator必须依附于Collection对象,若有一个Iterator对象,则必然有一个与之关联的Collection对象。

使用Lambda表达式遍历Iterator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
/**
* Created by 晓辉 on 2016/5/23.
*/
public class IteratorEach {
public static void main(String[] args) {
// 创建一个集合
Collection books=new HashSet<>();
books.add("java");
books.add("c#");
Iterator it=books.iterator();
// 使用Lambda表达式遍历所有的集合
it.forEachRemaining(obj->System.out.println(obj));
}
}

输出结果
c#
java

注意:这里的输出是倒序。


##使用foreach遍历集合元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class ForeachTest {
public static void main(String[] args) {
// 创建一个集合
Collection books=new HashSet<>();
books.add("java");
books.add("c#");
for(Object obj:books){
// 此处的books变量也不是集合的本身元素
String book=(String)obj;
System.out.println(book);
if (book.equals("java")){
books.remove(book);
}
}
System.out.println(books);
}
}

for循环中的迭代变量也不是集合元素本身,系统只是以此把集合元素的值赋值给迭代变量,因此for循环中修改的迭代变量的值是也是没有任何意义。


不介意的话,可以请我喝杯咖啡吗?或扫一扫支付宝领红包