List/Map 遍历

这篇博客探讨了List和Map两种数据结构的遍历方法,包括for-each、迭代器Iterator以及for循环。文章指出,对于List,推荐使用for-each,如果需要操作索引则使用迭代器。特别是当List是LinkedList时,避免使用for循环中的get方法以提高效率。对于Map,首选的遍历方式同样是for-each,而避免使用先遍历key再通过get方法获取值的低效方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List

遍历方法有三种:
1. for-each
2. 迭代器 Iterator(ListIterator)
3. for

  • 首选for-each
  • 需要用到迭代器方法时用迭代器,比如next,remove(,add,set)
  • 在遍历过程中需要利用索引进行计算,或显示控制索引
  • for 循环的时候用到了list.get(i),如果这个list不是ArrayList,而是LinkedList,效率会很慢,因为get方法每次都要遍历一次
        // 初始化
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }

        // for-each 因为没有索引,无法修改元素
        for (Integer value : list) {
            System.out.println(value);
        }

        // Iterator, 可以在遍历过程中删除
        for (Iterator<Integer> it = list.iterator(); it.hasNext(); ) {
            Integer value = it.next();
            System.out.println(value);
            if (value == 1) {
                it.remove();
            }
        }
        // ListIterator, 可以在遍历过程中删除,添加和修改
        for (ListIterator<Integer> listIterator = list.listIterator(); listIterator.hasNext(); ) {
            Integer value = listIterator.next();
            if (value == 1) {
                listIterator.remove(); // 下一次next,指向的是2
                listIterator.add(-1);  // 下一次next,指向的依然是2
            } else {
                listIterator.set(value + 1);
            }
        }

        // for 可以修改元素和显示控制索引
        for (int i = 0; i < list.size(); i++) {
            Integer value = list.get(i);
            System.out.println(value);
            list.set(i, value + 1); // value + 1
            if (i == list.size() - 1) {
                list.set(0, 0);     // list[0] = 0
            }
        }

Map

遍历方法有三种:
1. for-each
2. 迭代器 Iterator(ListIterator)
3. for 先遍历key,再使用get方法获取,效率低下,不建议使用

  • 首选for-each
  • 需要用到迭代器方法时用迭代器,比如next,remove
        // 初始化
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            map.put(i, i);
        }

        // 同时使用key和value
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
        }

        // 只使用key
        for (Integer key : map.keySet()) {
            System.out.println("key = " + key);
        }

        // 只使用value
        for (Integer value : map.values()) {
            System.out.println("value = " + value);
        }

        // 使用迭代器,需要在遍历过程中删除
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, Integer> entry = iterator.next();
            System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
            // remove 1
            if (entry.getValue() == 1) {
                iterator.remove();
            }
        }
        System.out.println("after remove 1");
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值