JDK源码(三)List集合

版权声明:菜鸟_zhengke的博客 https://blog.csdn.net/qq_42014192/article/details/89670278

 源码分析:

package java.util;

import java.util.function.UnaryOperator;

public interface List<E> extends Collection<E> { 
    /**
     * 定义size方法,应返回size大小,最大值为Integer.MAX_VALUE
     * @return
     */
    int size();

    /**
     * 定义isEmpty方法,用于返回是否为空
     * 如果不包含元素,则返回true
     * @return
     */
    boolean isEmpty();

    /**
     * 定义contains方法,判断一个obj是否属于此集合
     * 如不是集合,则返回true
     * @param o
     * @return
     */
    boolean contains(Object o);

    /**
     * 定义迭代器方法,返回一个迭代器对象
     * @return
     */
    Iterator<E> iterator();
    /**
     * 定义转换为转换Obj数组的方法,返回一个obj数组
     * @return
     */
    Object[] toArray();
    /**
     * 定义转换为泛型T数组的方法,返回一个指定泛型的数组
     * @param a
     * @param <T>
     * @return
     */
    <T> T[] toArray(T[] a);
    /**
     * 定义add方法,添加一个元素e,并返回添加成功标志
     * @param e
     * @return
     */
    boolean add(E e);
    /**
     * 定义remove方法,移除一个元素obj,并返回移除元素成功标志
     * @param o
     * @return
     */
    boolean remove(Object o);
    /**
     * 定义containsAll方法,判断是否包含集合实例对象c
     * @param c
     * @return
     */
    boolean containsAll(Collection<?> c);
    /**
     * 定义addAll方法,添加集合实例对象c到本实例中
     * @param c
     * @return
     */
    boolean addAll(Collection<? extends E> c);
    /**
     * 定义addAll方法,从某个index开始插入指定集合实例
     * @param index
     * @param c
     * @return
     */
    boolean addAll(int index, Collection<? extends E> c);
    /**
     * 定义removeAll方法,从本实例中移除集合实力对象c
     * @param c
     * @return
     */
    boolean removeAll(Collection<?> c);
    /**
     * 定义retainAll方法,取本例与集合实例c的交集,判断交集元素数量是否大于0
     * @param c
     * @return
     */
    boolean retainAll(Collection<?> c);

    /**
     * jdk1.8新增
     * 大意为:
     * 定义replaceAll方法,根据传递参数的函数式,传递内容是接口类型
     * 该接口定义了operator函数,该函数传递给Objects.requireNonNull进行判断
     * 匹配成功则进行set值进行替换,使用List迭代器进行迭代替换
     * @since 1.8
     */
    default void replaceAll(UnaryOperator<E> operator) {
        Objects.requireNonNull(operator);
        final ListIterator<E> li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }

    /**
     * 排序列表使用提供的 Comparator比较元素。
     * @param c
     */
    default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

    /**
     * 定义clear方法,清除本例集合中的所有元素
     */
    void clear();
    /**
     * 定义equals方法,判断对象是否相对
     * @param o
     * @return
     */
    boolean equals(Object o);
    /**
     * 定义hashCode方法,获取hashCode标记的方法
     * @return
     */
    int hashCode();


    /**
     * List要求,定义get方法,获取指定index的值
     * @param index
     * @return
     */
    E get(int index);

    /**
     * List要求,定义set方法,在指定index的元素设置为目标元素
     * @param index
     * @param element
     * @return 修改前的元素
     */
    E set(int index, E element);

    /**
     * 在指定位置插入指定元素在这个列表(可选操作)。变化的元素目前位置(如果有的话)和任何后续元素向右(添加一个索引)。
     * @param index 指数要插入指定的元素
     * @param element 元素被插入
     */
    void add(int index, E element);

    /**
     * 这个列表中删除指定位置的元素(可选操作)。任何后续元素转移到左(减去一个来自他们的指标)。返回的元素从列表中删除。
     * @param index 删除元素的索引
     * @return
     */
    E remove(int index);


    /**
     *
     * 获取查询元素的index,若备查元素为null,则寻找空元素,返回index
     * 若备查元素不为null,则使用equal判断该元素是否存在,并返回index
     * 不存在则返回-1
     * 被contains调用
     * @param o
     * @return
     */
    int indexOf(Object o);

    /**
     * 倒叙查询第一个出现的被查元素
     * @param o 元素搜索
     * @return
     */
    int lastIndexOf(Object o);


    /**
     * 返回一个列表迭代器在这个列表的元素(在适当的序列)
     * @return
     */
    ListIterator<E> listIterator();

    /**
     * 返回一个列表迭代器在这个列表的元素(在适当的序列),开始在指定的位置在列表中。指定的索引显示返回的第一个元素,一个初始调用 next。初始调用 previous将返回指定索引的元素- 1。
     * @param index 索引返回第一个元素的列表迭代器(通过调用 next)
     * @return
     */
    ListIterator<E> listIterator(int index);


    /**
     *返回一个指定的部分之间的这个列表视图 fromIndex,包容,和 toIndex,排斥。(如果 fromIndex和 toIndex是相等的,返回的列表是空的。)
     * @param fromIndex 低端点(包容)的子列表
     * @param toIndex 高端点(独家)的子列表
     * @return 在这个列表的视图指定范围
     */
    List<E> subList(int fromIndex, int toIndex);

    /**
     * Creates a {@link Spliterator} over the elements in this list.
     *
     * <p>The {@code Spliterator} reports {@link Spliterator#SIZED} and
     * {@link Spliterator#ORDERED}.  Implementations should document the
     * reporting of additional characteristic values.
     *
     * @implSpec
     * The default implementation creates a
     * <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
     * from the list's {@code Iterator}.  The spliterator inherits the
     * <em>fail-fast</em> properties of the list's iterator.
     *
     * @implNote
     * The created {@code Spliterator} additionally reports
     * {@link Spliterator#SUBSIZED}.
     *
     * @return a {@code Spliterator} over the elements in this list
     * @since 1.8
     */
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42014192/article/details/89670278