目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

Iterator(迭代器)

循环遍历集合

//普通for循环  
 for (int i = 0; i < list.size(); i++) {}  
  
 //增强for循环  
 for (String str : list) {}

迭代器(Iterator)

 Iterator 是 Java 中的 ⼀个接 ⼝,核 ⼼作 ⽤就是 ⽤来遍历容器的元素,当容器实现了 Iterator 接 ⼝后,可以通过调 ⽤ Iterator()⽅法获取 ⼀个 Iterator 对象。
 因为容器的实现有多种,不同的容器遍历规则不 ⼀样,⽐如 ArrayList/LinkedList/HashSet/TreeSet 等,所以设计了 Iterator 接 ⼝,让容器本身去实 现这个接 ⼝,实现 ⾥ ⾯的 ⽅法,从 ⽽让开发 ⼈员不 ⽤关系容器的遍历机制,直接使 ⽤对应的 ⽅法即可。

核心方法
Iterator

//⽤于判断iterator内是否有下个元素,如果有则返回true,没有则false
boolean hashNext()

//返回iterator的下⼀个元素,同时指针也会向后移动1位
Obejct next()

//删除指针的上⼀个元素(容易出问题,删除元素不建议使⽤容器⾃⼰的⽅法,非线程安全)。
//只有当next执⾏完后,才能调⽤remove函数。
//如要删除第⼀个元素,不能直接调⽤ remove(),要先next⼀下()否则调⽤remove⽅法是 会抛出异常。
//迭代器遍历元素时不能通过Collection接⼝中的remove⽅法删除元素,只能⽤Iterator的remove ⽅法删除元素; 原因:某个线程在 Collection 上进⾏迭代时,不允许另⼀个线程修改该 Collection
//迭代出的对象是引⽤的拷⻉,如果修改迭代中的元素,那么就是修改容器对象的本身。
void remove()

迭代器使用

//遍历List
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");

	//从容器中获取Iterator对象
        Iterator<String> iterator = list.iterator();
	//开始迭代容器内部元素
        while (iterator.hasNext()) {
            String str=  iterator.next();
	    if("b".equals(str)){
	        //list.remove(); //ConcurrentModificationException并发修改异常
	    }
            System.out.println(str);
        }

	//遍历Map
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("1", "a");
        hashMap.put("2", "b");
        hashMap.put("3", "c");
	//获取entrySet
        Set<Map.Entry<String, String>> entrySet = hashMap.entrySet();
	//通过entrySet获取iterator迭代器对象
        Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> next =  iterator.next();
            String key = next.getKey();
            String value = next.getValue();
            System.out.println("key=" + key + ", vlaue=" + value); //key=1, vlaue=a
        }

迭代器 vs for 循环

  • for 循环适合顺序访问,或者通过下标进 ⾏访问的
  • 迭代器适合链式结构
  • 最终看使 ⽤场景,性能会有轻微差别,但是可以忽略

作者:Soulboy