• Javase之集合体系之(1)集合顶层类Collection与其迭代器知识


    集合体系之集合顶层类Collection与其迭代器知识

    集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存储多个对象,就不能是一个基本变量,而应该是一个容器类型的变量,在容器以前的内容中,只有数组和StringBuffer是容器类型。但StringBuffer的结果是一个字符串。故只能使用数组,即对象数组。但对象数组因为长度固定,不能适应变化的需求。所以Java提供集合类。

    • 集合与数组的区别

      1.集合的长度可变,而数组长度固定。

      2.数组存储了一类元素,集合可以存储不同类型的元素。

      3.数组即可存储基本类型数据,又可存储引用类型数据。但集合只能存储引用类型。


    Colection(接口)

    集合的顶层接口,其子体系有重复的,有唯一的,有无序的,有有序的。

    主要子接口有两个:
    ​ |–List
    ​ 有序(存储与取出顺序不一致),可重复。
    ​ |–Set
    ​ 无序(存储顺序与取出顺序不一致,但它有内在的存储顺序该顺序通过哈希表生成,有时在输入时可能与其内在顺序相同,但之并不代表其有序,多输入几个数据就会发现其无序性),唯一。

    Collection的功能概述

    添加功能

     boolean add(E e):添加一个元素
     boolean addAll(Collection<? extends E> c):添加一个集合的元素
    

    删除功能

     void clear():移除所有元素
     boolean remove(Object o):collection 中移除指定元素的单个实例
     boolean removeAll(Collection<?> c):移除一个集合的对象(只要有一个被移除就返回true

    判断功能

     boolean contains(Object o):判断集合是否包含指定元素
     boolean containsAll(Collection<?> c);判断集合是否包含指定的集合元素(包含所有才叫包含)
     boolean isEmpty():判断集合是否为空
    

    获取功能

       Iterator<E> iterator():生成一个迭代器对象,从而迭代访问每个元素
    

    长度功能

        int size():元素个数
    

    交集功能

     boolean retainAll(Collection<?> c):删除集合中,在c集合中不存在的元素
     解释:假定有A,B两个集合
     A,B做交集,最终结果存放在A中,B不变
     返回值表示A是否发生变化。
    

    把集合转换为数组

    • toArray
        Object[] toArray()
    

    Iterator(接口)

    对 collection 进行迭代的迭代器。

    是遍历集合的一种方式,迭代器依赖于集合存在

    迭代器定义为接口的原因:

    ​ 假定迭代器是一个类,那么我们就可以创建该类对象并调用方法来实现集合的遍历,但是Java中有许多的集合类,而这些集合类的数据结构不同,所以存储和遍历的方式是不同的。进而它们的遍历方式不同,所以没有定义迭代器类。

    ​ 而无论是哪种集合,都具备获取元素的操作,而且最好在辅助于判断功能,这样在获取前,先判断就不容易出错,所以判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的遍历方式不同。所以就把两种功能提取出来,而不提供具体实现,这就是迭代器声明为接口的原因。

    ​ 迭代器真正的实现类在具体的子类中,以内部类的方式实现。

    因为Collection类实现了Iterable而Iterable中

    hasNext

    boolean hasNext():如果仍有元素可以迭代,则返回 true。
    (换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。 
    

    next

    E next():返回迭代的下一个元素。
    

    remove

    void remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
    每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器
    所指向的 collection,则迭代器的行为是不确定的。 
    
    抛出: 
    UnsupportedOperationException - 如果迭代器不支持 remove 操作。 
    IllegalStateException - 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经
    调用了 remove 方法。
    

    迭代器使用的两种方式

    while

    通过迭代器的hasNext()和next()方法实现

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class t3 {
        public static void main(String[] args) {
            Collection<String> c = new ArrayList<String>();
            c.add("hello");
            c.add("world");
            c.add("java");
    
            Iterator<String> it = c.iterator();
            while (it.hasNext()){
                String s = it.next();
                System.out.println(s);
            }
        }
    }
    out:
    
    hello
    world
    java
    

    增强for循环

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class t3 {
        public static void main(String[] args) {
            Collection<String> c = new ArrayList<String>();
            c.add("hello");
            c.add("world");
            c.add("java");
            for (String s:c){
                System.out.println(s);
            }
        }
    }
    
    out:
    
    hello
    world
    java
    
    

    二者作用相同

  • 相关阅读:
    8.ps输出属性-----状态
    洛谷P1057 传球游戏
    动态规划
    洛谷P1192 台阶问题
    最大公约数和最小公倍数
    C++ memcpy()函数用法
    next_permutation(a,a+n)
    std::ios::sync_with_stdio(false);
    让计算机很快地求出a^b%c;
    洛谷P1433 吃奶酪
  • 原文地址:https://www.cnblogs.com/wf614/p/11673851.html
Copyright © 2020-2023  润新知