前两课我们学习了数组与集合,现在我们来看看如何将它们逐个获取出来吧!
学习目标
- 掌握数组、集合、Map的遍历方法
数组
还记得for怎么用吗?
我们要遍历一个数组的所有元素,需要循环的次数就是数组的长度,因此我们可以得到如下表达:
public static void main(String[] args) {
int[] array = new int[]{1,3,5,7,9,11};
for (int i=0;i<array.length;i++) {
System.out.println(array[i]);
}
}
/* 运行结果
1
3
5
7
9
11 */
变量名.实例变量名
来获取某个对象的实例变量。集合
我们用ArrayList举例,仿照数组的遍历:
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<>();
arrayList.add(0);
arrayList.add(3);
arrayList.add(20);
for (int i=0;i<arrayList.size();i++) {
System.out.println(arrayList.get(i));
}
}
这样输出的结果就是0、3、20。
Map
Map的遍历方式有些不同,我们一起通过代码来看看吧!
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(0,"1");
map.put(19, "2");
map.put(11, "5");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("键 " + entry.getKey() + " 对应的值为 " + entry.getValue());
}
}
根据方法名我们就知道,getKey就是获取键名,getValue就是获取值。
Entry是Map提供的一个接口,使用它就可以快速的遍历出Map的所有键值对。
用for的格式是:for(Map.Entry<K,V> 变量名称 : Map变量名.entrySet()) { ... }
迭代器
由于各种数据类型的内部结构不同,例如ArrayList与HashSet,我们不能用get方法获取Set的元素,但是它们都提供了一个迭代器。
很多情况下我们不知道如何获取某个容器的元素,但是它们会提供一个迭代器,迭代器的用法是一样的,因此我们不需要搞明白到底是用get还是其他方法来获取容器元素,只要拿到它的迭代器,就可以快速遍历它的元素。
下面我们以ArrayList的迭代器举例:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
Iterator<Integer> it = list.iterator();
}
Iterator是Collection中的接口,它也是Java中最简单的迭代器实现。
如上我们就获取到了这个ArrayList的迭代器,注意<>内的数据类型要与目标List的数据类型保持一致。
还记得while是使用方法吗?当条件成立时会不断执行代码块内的代码直到条件不成立。
很多情况下,我们不知道集合中元素到底有多少个,也许我们可以用size()或其他方法获取到,但当我们手上只有一个迭代器时,就必须用while来遍历了。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
hasNext()方法返回一个布尔值,意思是是否有下一个元素。
如果返回为true,那么它的下标就会自增1,然后再次调用hasNext()判断,这样就达到了一路到底的效果。
而next()方法就是获取下一个元素。
那么上述代码控制台输出就是0、1、2。
课后练习
- 利用for循环遍历数组、集合和Map。
- 尝试使用迭代器遍历集合。