• 数据结构(集合)学习之Collection和Iterator


    集合

    1、集合与数组

    数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。

    集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

    数组和集合都是用来存储数据的容器。

    区别:

    1)从长度来讲:

    数组:需要固定长度。

    集合:长度可以改变,可以根据保存的数据进行扩容。

    2)从存储内容上:

    数组:可以存储基本类型数据,还可以存储引用类型的数据(比如:String和上述演示的Student类)。

    集合:只能存储引用类型的数据,也就是说集合只能存储类的对象。

    3)从存储类型上:

    数组:只能存储相同类型的数据。

    集合:可以存储不同类型的数据,集合中可以存储任意类型的引用数据类型。

    2、Iterator

    介绍:

    public interface Iterator<E>
    一个集合的迭代器。 Iterator代替了Java Collections Framework中的Enumeration 。 迭代器有两种不同的枚举方式:
    迭代器允许调用者在迭代期间从底层集合中删除元素,并具有明确定义的语义。
    方法名称得到改进。
    此接口是Java Collections Framework的成员。

    3、Collection

    public interface Collection<E>extends Iterable<E>

    集合层次结构中的根界面。 集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List 。 该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。

     

    注意:

    1、Collection(接口)没有具体实现类,且是集合的根接口。(类似对Java对象中的Object() );

    2、Collection 继承了Iterable,而iterable接口里定义了返回iterator的方法,相当于对iterator的封装,同时实现了iterable接口的类可以支持for each循环。

    4、Iterator和Collection的关系

    Iterator是Collection的迭代器,Collection里面有方法:iterator()。作用:返回集合中元素的迭代器。

    用法(以Collection的子类ArrayList为例):

     1 public static void main(String[] args) {
     2         ArrayList<String> list = new ArrayList<String>();
     3         list.add("A");
     4         list.add("B");
     5         list.add("C");
     6         list.add("D");
     7         for (String value : list) {
     8             System.out.print(value + ",");
     9         }
    10         System.out.println();// 隔开两次输出
    11         Iterator it = list.iterator();
    12         while (it.hasNext()) {// hasNext():指针从第一个元素之前开始判断后面是否还有值
    13             if (it.next().equals("C")) {// it.next():获取到指针位置next的值
    14                 it.remove();
    15                 // 注意:remove()将会删除上次调用next()时返回的元素,也就是说先调用next()方法,再调用remove()方法才会删除元素。不然会报错:IllegalStateException
    16             }
    17         }
    18         for (String value : list) {
    19             System.out.print(value + ",");
    20         }
    21     }

    迭代过程:

     注意:当调用it.next()方法时成功,指针移向下一位,然后再返回刚开始判断的值,例如:

    此时,"B"的it.next()是"C",然后指针往后移,并返回值"C",此时如果立马调用remove(),删除的也是"C":

  • 相关阅读:
    PHP IDE NetBeans代码主题和除掉竖线解决方案
    初识Python
    从LazyPhp说起
    从Pycharm说起
    准备系统地研究一下"高性能网站开发",挑战很大,希望能坚持到底!
    IIS日志分析[资源]
    见一好东西:Threaded WebDownload class with Progress Callbacks
    ASP.net Application 中使用域用户登录
    看图找错
    汉字转拼音缩写的函数(C#)
  • 原文地址:https://www.cnblogs.com/Bernard94/p/12313595.html
Copyright © 2020-2023  润新知