• Iterable与Collection源码学习


    接口 - Iterable<T> - 可迭代

    描述

    实现本接口的类,其对象可以被迭代.同时支持forEach语法

    方法

    Iterator<T> iterator()

    类型

    抽象方法

    描述

    返回一个用于执行迭代的java.util.Iterator对象

    代码

    Iterator<T> iterator();
    

    default void forEach(Consumer<? super T> action)

    类型

    抽象默认方法

    描述

    遍历所有元素并分别传递给action方法

    代码

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    

    default Spliterator<T> spliterator()

    类型

    抽象默认方法

    描述

    返回一个Spliterator<T>对象

    代码

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
    

    接口 - Collection<E>

    继承

    Iterable

    实现

    描述

    规定了所有集合需要实现的方法

    方法

    int size()

    类型

    抽象方法

    描述

    返回当前集合的元素数量.当超过Integer.MAX_VALUE时,返回Integer.MAX_VALUE.

    代码

    int size();
    

    isEmpty()

    类型

    抽象方法

    描述

    当前集合中不包含任何元素时,返回true

    代码

    boolean isEmpty();
    

    contains(Object o)

    类型

    抽象方法

    描述

    当前集合中包含一个或以上的指定元素时,返回true.否则返回false

    代码

    boolean contains(Object o);
    

    toArray()

    类型

    抽象方法

    描述

    返回一个包含当前集合中所有元素的数组.如果当前集合是有序集合,则这个数组中的元素顺序应该与此有序集合中的顺序相同.
    同时,返回的数组必须是一个新端的数组.可以让调用者自由的修改返回数组的结构.而不影响本集合.

    代码

    Object[] toArray();
    

    toArray(T[] a)

    类型

    抽象方法

    描述

    toArray()相似.返回数据类型使用运行时类型(也就是这里的T).
    当参数a可以容纳当前集合中的元素时,此方法会将当前集合内的元素放入参数a中,并在防止最后一个元素的再后面的一个位置设置为null.
    当参数a无法容纳当前集合中的元素时,会返回一个新数组

    代码

    <T> T[] toArray(T[] a);
    

    add(E e)

    类型

    抽象方法

    描述

    添加元素到当前集合中.当集合被修改时,将会返回true.否则返回false
    在源码的注释中,提到了对于null,重复元素,与一些特殊情况下的处理措施.如不再返回false而是抛出异常等.这要看具体的实现了.

    代码

    boolean add(E e);
    

    remove(Object o)

    类型

    抽象方法

    描述

    删除集合中的指定元素.当集合被更改时,返回true

    代码

    boolean remove(Object o);
    

    containsAll(Collection<?> c)

    类型

    抽象方法

    描述

    给定集合中的所有元素均在当前集合中存在时,返回true

    代码

    boolean containsAll(Collection<?> c);
    

    addAll(Collection<? extends E> c)

    类型

    抽象方法

    描述

    添加给定集合中的全部元素到当前集合中
    这里源码注释中提出了一些为确认的情况.

    • 参数c在操作中被改变(这里一般是多线程共用一个对象时引起的).
    • 参数c就是当前集合(OOM~).

    代码

    boolean addAll(Collection<? extends E> c);
    

    removeAll(Collection<?> c)

    类型

    抽象方法

    描述

    删除当前集合中的出现在参数c集合中的全部元素

    代码

    boolean removeAll(Collection<?> c);
    

    removeIf(Predicate<? super E> filter)

    类型

    抽象默认方法

    描述

    根据Predicate(断言),删除全部元素
    这里直接使用iterator(),进行迭代,断言,删除操作

    代码

    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }
    

    retainAll(Collection<?> c)

    类型

    抽象方法

    描述

    删除掉当前集合中,不包含在参数c集合中的全部元素

    代码

    boolean retainAll(Collection<?> c);
    

    clear()

    类型

    抽象方法

    描述

    清除集合中的全部元素

    代码

    void clear();
    

    equals(Object o)

    类型

    抽象方法

    描述

    以重写的方式,将java.lang.Object.equals方法设置为抽象方法.约束子类实现equals方法

    代码

    boolean equals(Object o);
    

    hashCode()

    类型

    抽象方法

    描述

    以重写的方式,将java.lang.Object.hashCode方法设置为抽象方法.约束子类实现hashCode方法

    代码

    int hashCode();
    
  • 相关阅读:
    从一个表复制信息到另一个表
    Base64原理 bits 3>4 8bits/byte>6bits/byte
    blockchain
    routing decisions based on paths, network policies, or rulesets configured by a network administrator
    Least_squares 最小二乘法
    How to Write a Spelling Corrector
    prior knowledge
    Law of total probability
    Subset sum problem
    wdateyearmonthweekgategoryamountcoin
  • 原文地址:https://www.cnblogs.com/heaven-elegy/p/11929022.html
Copyright © 2020-2023  润新知