Iterator(迭代器) 和 list

Iterator(迭代器) 和 list


提示:以下是本篇文章正文内容,下面案例可供参考

一、Iterator(迭代器)

对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。
在这里插入图片描述
其中Iterator中有三个方法,分别为:

  • hasNext() : 如果仍有元素可以迭代,则返回 true
  • next() : 返回迭代 的下一个元素。
  • remove() :从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
        Collection<Integer> ct = new ArrayList<>();
        ct.add(12);
        ct.add(16);
        ct.add(56);
        ct.add(63);
        ct.add(96);
        ct.add(33);
        ct.add(69);

        Iterator<Integer> iter = ct.iterator();

        while (iter.hasNext()){
   
            int e = iter.next();
            System.out.println(e);
        }

		System.out.println(iter.hasNext());

		iter.remove();
        System.out.println(ct);

输出信息:

D:\kaifamiao\environments\OpenJDK-17.0.2\bin\java.exe -javaagent:D:\kaifamiao\applications\ideaIU-2021.2.2\ideaIU-2021.2.2\lib\idea_rt.jar=55736:D:\kaifamiao\applications\ideaIU-2021.2.2\ideaIU-2021.2.2\bin -Dfile.encoding=UTF-8 -classpath D:\kaifamiao\mycodes\java-base\out\production\iterator IteratorTest
12
16
56
63
96
33
69
false
[12, 16, 56, 63, 96, 33]

Process finished with exit code 0

而每一个迭代器只能从头到尾迭代一次,不然会报:

在这里插入图片描述

二、list

可以人为的指定顺序(定义顺序),可以重复(可以排序)(即有索引)。
在这里插入图片描述
其中一个实现此接口的类是 ArrayList<E>
在这里插入图片描述
包含两种增加方式:

  • ​ add(E e) :将指定的元素添加到此列表的尾部。
  • ​ add(int index, E element) :将指定的元素插入此列表中的指定位置。
        List<Integer> list = new ArrayList<>();

        list.add(16);
        list.add(15);
        list.add(35);
        list.add(52);
        list.add(32);

        System.out.println(list);

        list.add( 1 , 56);
		System.out.println(list);

[16, 15, 35, 52, 32]
[16, 56, 15, 35, 52, 32]

Process finished with exit code 0

可以将属猪转化为 list集合 ,但对转化过来的 list集合 不能进行添加和删除元素 ,但可以对其进行 排序 和 替换。

        Integer[] array = {
    9, 10, 2, 6, 7, 3, 4 };
  
        List<Integer> list = Arrays.asList( array );
        System.out.println( list );

        List<Integer> numbers = new ArrayList<>();
        numbers.addAll( list );
        numbers.add( 1 );
        numbers.add( 0 , 5 );

        System.out.println( numbers );

而排序有两种方式,自然排序 和 比较器排序。其中 sort( null )是指没有在里面传任何比较器,所以为自然排序。

        Comparator<Integer> comparator = new Comparator<Integer>() {
   
            @Override
            public int compare(Integer a, Integer b) {
   
                if( a != null && b != null ) {
   
                    return -( a - b );
                }
                return 0;
            }
        };

Java 8 之前,可以通过 Arrays.asList() 将数组 “转化”(造) 为 list 集合,但这个 list集合 不能添加,删除,但可以替换和排序。因为该类是 Arrays 中的内部类,所有外界不可对此进行添加删除。

而在 Java 8 之后,利用 list.of() 得到一个元素不能为 null(主要取决于实现类)且不可变的(即 添加删除排列,查找都不能)的 list 集合,并且 括号中第一个参数确定了之后参数的类型 (如果你参数列表中有多种类型,则会自动认定为 Object 类)。

copyOf() 复制过去的另一个集合也是不能进行修改的,他们的都是其内部类方法实现的。

其中 listIterator 是可以通过方法从第一个元素开始迭代,还是从索引 -1 的位置就开始迭代。
在这里插入图片描述
由此可以实现多次迭代。

ArrayList不是 线程安全 的。
在这里插入图片描述
快速失败 是指:

当检测出有迭代器时,应该使用迭代器所提供的方法,当发现使用(迭代器之外的)集合中的方法时,会尽可能的抛出异常。


相关推荐

  1. 模式(Iterator

    2024-01-02 06:46:01       38 阅读
  2. 27.【TypeScript 教程】(Iterator)

    2024-01-02 06:46:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 06:46:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 06:46:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 06:46:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 06:46:01       18 阅读

热门阅读

  1. Spring04

    Spring04

    2024-01-02 06:46:01      31 阅读
  2. 我与VR的再拜之交

    2024-01-02 06:46:01       34 阅读
  3. 国科大2023.12.28图像处理0854最后一节划重点

    2024-01-02 06:46:01       31 阅读
  4. 2401编辑器,好插件

    2024-01-02 06:46:01       47 阅读
  5. TensorFlow Hub模型

    2024-01-02 06:46:01       40 阅读
  6. React16源码: ConcurrentMode的使用及源码实现

    2024-01-02 06:46:01       37 阅读
  7. .net8时代,微软.net开发策略,F#不就是VB语言吗?

    2024-01-02 06:46:01       33 阅读
  8. Linux 硬件配置

    2024-01-02 06:46:01       33 阅读
  9. AWS CDK安装到AWS EC2 Linux 2

    2024-01-02 06:46:01       39 阅读
  10. Python中常见的错误示

    2024-01-02 06:46:01       30 阅读