JAVA深化篇_14——Iterator迭代器接口介绍
Iterator接口
Iterator迭代器接口介绍
Collection接口继承了Iterable接口,在该接口中包含一个名为iterator的抽象方法,所有实现了Collection接口的容器类对该方法做了具体实现。iterator方法会返回一个Iterator接口类型的迭代器对象,在该对象中包含了三个方法用于实现对单例容器的迭代处理。
Iterator对象的工作原理:
Iterator接口定义了如下方法:
boolean hasNext();
//判断游标当前位置的下一个位置是否还有元素没有被遍历;Object next();
//返回游标当前位置的下一个元素并将游标移动到下一个位置;void remove();
//删除游标当前位置的元素,在执行完next后该操作只能执行一次;
Iterator迭代器的使用迭代List接口类型容器
public class IteratorListTest {
public static void main(String[] args) {
//实例化容器
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//获取元素
//获取迭代器对象
Iterator<String> iterator = list.iterator();
//方式一:在迭代器中,通过while循环获取元素
while(iterator.hasNext()){
String value = iterator.next();
System.out.println(value);
}
System.out.println("-------------------------------");
//方法二:在迭代器中,通过for循环获取元素
for(Iterator<String> it = list.iterator();it.hasNext();){
String value = it.next();
System.out.println(value);
}
}
}
迭代Set接口类型容器
public class IteratorSetTest {
public static void main(String[] args) {
//实例化Set类型的容器
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
//方式一:通过while循环
//获取迭代器对象
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String value = iterator.next();
System.out.println(value);
}
System.out.println("-------------------------");
//方式二:通过for循环
for(Iterator<String> it = set.iterator();it.hasNext();){
String value = it.next();
System.out.println(value);
}
}
}
迭代Map接口类型容器
public class IteratorMapTest {
public static void main(String[] args) {
//实例化HashMap容器
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
//遍历Map容器方式一
Set<String> keySet = map.keySet();
for (Iterator<String> it = keySet.iterator(); it.hasNext();){
String key = it.next();
String value = map.get(key);
System.out.println(key+" ------------- "+value);
}
System.out.println("------------------------");
//遍历Map容器方式二
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
while(iterator.hasNext()){
Map.Entry entry = iterator.next();
System.out.println(entry.getKey()+" ------------ "+ entry.getValue());
}
}
}
在迭代器中删除元素
public class IteratorRemoveTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
//不要在一次循环中多次调用next方法。
String value = iterator.next();
iterator.remove();
}
System.out.println("----------------");
for(Iterator<String> it = list.iterator();it.hasNext();){
System.out.println(it.next());
list.add("dddd");
}
}
}