zoukankan      html  css  js  c++  java
  • java中的Iterator和ListIterator的区别

    (一)iterator迭代器

    Collection的iterator方法返回一个实现了一个Iterator接口的对象

    Iterator接口中包含三个方法:

    1)E next()

    2)boolean hasNext()

    3)void remove

    具体用法:

    Iterator<Integer> integers=collection.iterator();
            while(integers.hasNext()){
                System.out.print(integers.next()+" ");
            }

    可以通过调用hasNext()判断是否达到集合的末尾

    调用next()方法返回访问到的元素

    但是也可以通过foreach循环实现上述的方法

    for(Integer i:collection){
                System.out.print(i+" ");
            }

     编译器简单的将foreach循环翻译为带有迭代器的循环

    foreach使用是有条件的,即其必须和实现了Iterable接口的对象一起工作,Collection接口扩展了Iterable接口,所以集合可以使用foreach循环

    Iterator的作用:能够将遍历序列与序列底层的结构分开,通过它统一了对容器的访问

    public class AddingGroups {
        public static void display(Iterator<String>iterator){
            while(iterator.hasNext()){
                String s=iterator.next();
                System.out.print(s+" "+" ");
            }
            System.out.println();
        }
        public static void main(String[] args) {
           List<String> list1=new ArrayList<>(Arrays.asList("a","b","c"));
           List<String> list2=new LinkedList<>(Arrays.asList("d","e","f"));
           Set set1=new HashSet<>(Arrays.asList("g","h","i"));
           Set set2=new TreeSet<>(Arrays.asList("j","k","l"));
           display(list1.iterator());
           display(list2.iterator());
           display(set1.iterator());
           display(set2.iterator());
        }
    }

    通过iterator可以不管集合的类型信息了

    (二)ListIterator迭代器

    List迭代器继承Iterator,有更强大的功能,但是其有限制条件,它只能用于各种List的访问

    ListIterator扩展的功能:

    1)双向移动

     2)可以通过nextIndex()和previousIndex()方法返回当前位置的前一个和后一个元素的索引

    3)可以通过set()方法修改访问过的元素

    4)通过调用listIterator(n)方法创建一个一开始就指向列索引为n的元素处的ListIterator

    具体作用通过代码来演示,如下:

    public class ListIterator {
    
        public static void main(String[] args) {
            String[] s={"a","b","c","d","e","f","g","h","i"};
            List<String>list= Arrays.asList(s);
            java.util.ListIterator<String> it= list.listIterator();
            while(it.hasNext()) {
                System.out.println(it.next()+", "+it.nextIndex()+", "+it.previousIndex()+"; ");
            }
            System.out.println();
            while(it.hasPrevious()){
                System.out.print(it.previous()+" ");
            }
            System.out.println();
            System.out.println(list);
            //指向索引位置为3的地方
            it=list.listIterator(3);
            while(it.hasNext()){
                it.next();
                //索引位置从3开始的地方将集合内容改为xxx
                it.set("xxx  ");
            }
            System.out.println(list);
        }
    }
    

      

  • 相关阅读:
    条件概率-独立事件-互斥事件-对立事件
    数学
    可视化:svg相关基础
    移动端调用摄像头(相机)相册
    移动端的事件点透及原因
    ios滑动流畅(丝般顺滑)滚动
    动画框架基础部分
    css美化select标签,兼容ie10 ie10+,chrome。但不支持ie9 ie9-
    ie11 调试工具不能使用
    css使用
  • 原文地址:https://www.cnblogs.com/Hdaydayup/p/7127103.html
Copyright © 2011-2022 走看看