前言:
今天我们对“java中的迭代”都比较注重,同学们都想要了解一些“java中的迭代”的相关知识。那么小编同时在网络上收集了一些有关“java中的迭代””的相关资讯,希望兄弟们能喜欢,咱们一起来学习一下吧!迭代接口
不管是哪一种容器的实现类,都会用到对每个元素的遍历。 遍历最方便的办法,当然是用自带的迭代器了。
在 main 函数里输入 Iterator iter,就会导入 util 包下的这个 Iterator, import java.util.Iterator; 然后鼠标放在 Iterator 上,长按 command 键,就可以进入迭代接口的源码。 接着,熟悉的 command+7,打开结构视图,如下:
可以看到有 Iterator 接口定义了 4 个方法:
hasNext() 有没有下一个,有就是 true,没有就 false;next() 和上面的 hasNext(),一起搭配使用,就是返回下一个;forEachRemaining() 从源码内容看,有一个 while 循环,只要hasNext()返回的结果为 true,就执行 next;
default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } 复制代码
remove()和遍历时删除元素有关。
default void remove() { throw new UnsupportedOperationException("remove"); } 复制代码
举个栗子遍历 List
public class TestIterator { public static void main(String[] args) { TestIteratorList(); } public static void TestIteratorList() { List<String> list = new ArrayList<>(); list.add("今天"); list.add("是"); list.add("冬至"); // 使用迭代器遍历 list for(Iterator<String> iter=list.iterator();iter.hasNext();) { String temp = iter.next(); //返回当前内容,且游标指向下一个 System.out.println(temp); } }}复制代码
运行结果:
注意,它不像是增强 for 循环,而是像普通的 for 循环一样,用分号隔开。 同时,关注到变化的地方,最后循环的处理不写。
我们把对 游标的移动,放在循环体中去做 next() 及打印操作。
遍历 Set 同理
public static void TestIteratorSet() { Set<String> lunch = new HashSet<>(); lunch.add("螺蛳粉"); lunch.add("毛肚火锅"); lunch.add("部队火锅"); lunch.add("过桥米线"); for(Iterator<String> iterator = lunch.iterator();iterator.hasNext();){ String temp = iterator.next(); System.out.println(temp); }}复制代码
相应的更改一下 main 函数里调的方法名,运行结果:
遍历 Map,略有不同
多了一步操作,把一个个位置上的都放到 Set 里:
public static void TestIteratorMap() { Map<Integer, String> students = new HashMap<>(); students.put(1,"Harry"); students.put(2,"Hermione"); students.put(3,"Ron"); // 注意变化 Set<Map.Entry<Integer, String>> set = students.entrySet(); // Set 里面放 Entry for(Iterator<Map.Entry<Integer, String>> iterator = set.iterator(); iterator.hasNext();) { Map.Entry<Integer, String> temp = iterator.next(); System.out.println(temp.getKey() + ": " + temp.getValue()); }}复制代码
运行结果:
温故
前面学过的 List 类为例,继承了 Collection 接口:
再进到 Collection 接口里,诶~!就会发现这个接口继承了 Iterable 接口:
再走一步,就会发现 Iterable,通过 Iterator<T> iterator();获得了一个迭代器对象:
自然就回到了上一块内容所说的,Iterator 定义了迭代器要实现的方法。
标签: #java中的迭代