集合框架Itertor接口
1、集合输出
前面我们已经学习了集合的基本操作,很多情况下,我们需要把集合的内容进行输出,也
就是遍历集合。
遍历集合的方式有以下几种:
1、Iterator
2、 ListIterator
3、 Enumeration
4、 foreach
其中Iterator的使用率最高,在JDK1.5后新增的foreach也被大量使用。
2、Iterator
public interface Iterator
对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的
Enumeration。
boolean hasNext() | 如果仍有元素可以迭代,则返回 true。 |
---|---|
E next() | 返回迭代的下一个元素。 |
– | – |
void remove() | 从迭代器指向的 collection 中移除迭代器返回的最后一个元素。 |
3、ListIterator
public interface ListIterator
extends Iterator
系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列
表中的当前位置。
void add(E e) | 增加元素 |
---|---|
boolean hasPrevious() | 判断是否有前一个元素 |
E previous() | 取出前一个元素 |
void set(E e) | 修改元素的内容 |
int previousIndex() | 前一个索引位置 |
int nextIndex() | 下一个索引位置 |
4、Enumeration
public interface Enumeration
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用
nextElement 方法将返回一系列的连续元素。
注:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的
移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是
Enumeration 接口。
boolean hasMoreElements() | 判断是否有下一个元素 |
---|---|
E nextElement() | 取出当前元素 |
import java.awt.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class IteratorDome {
private static void enumration() {
Vector<String> vs=new Vector<String>();
vs.add("hjgj");
vs.add("ghuopihv");
vs.add("gjhagd");
vs.add("dakj");
Enumeration<String> es=vs.elements();
//hasMoreElements() 测试此枚举是否包含更多的元素。
while(es.hasMoreElements()) {
System.out.println(es.nextElement());
}
}
//Iterator(jdk1.5前)
private static void iterator(Collection<cat> c) {
Iterator<cat> iter=c.iterator();
//hasNext, 如果仍有元素可以迭代,则返回 true。
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
//foreach(jdk1.5后)
private static void foreach(Collection<cat> c) {
for(cat s:c) {
System.out.println(s);
}
}
public static void main(String[] args) {
ArrayList<cat> list=new ArrayList<>();
cat c1=new cat("hh",1);
cat c2=new cat("huahau",3);
cat c3=new cat("beibei",2);
cat c4=new cat("hh",1);
list.add(c1);
list.add(c2);
list.add(c3);
list.add(c4);
//foreach(list);
iterator(list);
enumration();
}
}
cat [name=hh, age=1]
cat [name=huahau, age=3]
cat [name=beibei, age=2]
cat [name=hh, age=1]
hjgj
ghuopihv
gjhagd
dakj
5、foreach
在前面的知识讲解中,我们使用foreach来输出数组的内容,那么也可以输出集合中的内容。在使用foreach输出的
时候一定要注意的是,创建集合时要指定操作泛型的类型。
List numbers = new ArrayList<>();
JDK1.8新特性:
//no.1
numbers.forEach((Integer integer) -> {System.out.println(integer);});
//no.2
numbers.forEach(integer -> {System.out.println(integer);});
//no.3
numbers.forEach(integer -> System.out.println(integer));
//no.4
numbers.forEach(System.out::println);
//no.5
numbers.forEach(new MyConsumer());
/*
* jdk1.8新特性
*/
private static void foreach() {
ArrayList<String> list=new ArrayList<>();
list.add("hjgj");
list.add("ghuopihv");
list.add("gjhagd");
list.add("dakj");
//list.forEach((String s)->{System.out.println(s);});
//list.forEach( s->{System.out.println(s);});
//list.forEach( s->System.out.println(s));
//list.forEach(System.out::println);
hjgj
ghuopihv
gjhagd
dakj