Java入门系列教程#9 使用循环和迭代器遍历数组或集合
本文最后更新于 260 天前,其中的信息可能已经有所发展或是发生改变。

前两课我们学习了数组与集合,现在我们来看看如何将它们逐个获取出来吧!

学习目标

  1. 掌握数组、集合、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 */
这里我们用到了 array.length 表示数组长度,还记得length指的是什么吗?它就是一个实例变量,表示数组长度,当这个数组被实例化出来之后,这个实例变量的值也就确定了。因此我们通过 变量名.实例变量名 来获取某个对象的实例变量。

集合

我们用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()) { ... }

注意:上面的KV需要和声明Map时的KV保持一致。

迭代器

由于各种数据类型的内部结构不同,例如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。

课后练习

  1. 利用for循环遍历数组、集合和Map。
  2. 尝试使用迭代器遍历集合。
未经允许禁止转载本站内容,经允许转载后请严格遵守CC-BY-NC-ND知识共享协议4.0,代码部分则采用GPL v3.0协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇