迭代器 Iterator

Iterator

        Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 List、Set等框架集合

        对框架结合进行迭代的类,称其为迭代器

        迭代器是专门取出集合元素的对象,但该对象不能直接创建对象(通过new),该对象是以内部类的形式存在于每个集合类的内部,通过方法进行调用

// Iterator, 通过key获取value,先取出所有key的集合
Set keys = map.keySet();
//获取Iterator对象
Iterator it = keys.iterator();   
while (it.hasNext()) {
    //取出key
    String key = (String) it.next();     
    //根据key取出对应的值 
    Student stu = (Student) map.get(key);    
    System.out.println(key + "\t" + stu.getName());
}
// 同时获取key和value
Iterator iterMap = map.entrySet().iterator();
while (iterMap.hasNext()) {
    Map.Entry strMap = (Map.Entry) iterMap.next();
    System.out.println("key为:" + strMap.getKey() +
        ", value为:" + strMap.getValue());
}
    

For 和 Iterator

        for 迭代元素简单,iterator 迭代起来稍微复杂,但删除元素时,Iterator 更有优势

        由于迭代器的 remove 操作删除的是最近一次由next操作获取的元素,而不是当前游标所指向的元素,因此 for在迭代时,不能删除元素,而 Iterator 可以

public class TestDelete {
    public static void main(String[] args) {
        List<String> nameList = new ArrayList<>();
        nameList.add("tom");
        nameList.add("jerry");
        nameList.add("kitty");
        nameList.add("kitty");

        printList(nameList);

        // 删除集合中所有的kitty
        remove2(nameList, "kitty");
        printList(nameList);
    }

    public static void printList(List<String> nameList) {
        for (String s : nameList) {
            System.out.print(s + " ");
        }
        System.out.println();
    }

    /**
     * 使用迭代器删除
     */
    public static void remove1(List<String> nameList, String name) {
        // 获取迭代器
        Iterator<String> iterator = nameList.iterator();
        while (iterator.hasNext()) {
            // 遍历集合中的所有元素
            String next = iterator.next();
            if (name.equals(next)) {
                iterator.remove();
            }
        }
    }

    /**
     * 使用for删除(无法循环遍历)
     */
    public static void remove2(List<String> nameList, String name) {
        for (int i = 0; i < nameList.size(); i++) {
            if (name.equals(nameList.get(i))){
                // 删除当前元素后,后面未遍历到的元素的下标会受到影响
                // 导致下标混乱
                nameList.remove(i);
            }
        }
    }

    /**
     * 使用for删除-倒序
     */
    public static void remove3(List<String> nameList, String name) {
        for (int i = nameList.size()-1; i >=0; i--) {
            if (name.equals(nameList.get(i))){
                // 倒序删除,下标的遍历不会受到影响
                nameList.remove(i);
            }
        }
    }
}

运行结果如下:

tom jerry kitty kitty 
tom jerry kitty 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值