JDK源码 – 容器 – List

JDK源码 – 容器 – List

本章介绍的是List,主要学习方式是解读源码,将底层实现暴露给阅读者,这样学习更简单明了。

List是一个继承于Collection的接口,即List是集合中的一种。

List是有序的队列,List中的每一个元素都有一个索引;

第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。

实现继承Collection:

public interface List<E> extends Collection<E> {}(如果Collection不懂请看上一篇文章 http://blog.csdn.net/smd2575624555/article/details/79389760 )

关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;

 由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

Collection的API

abstract boolean add(E object)

abstract boolean addAll(Collection<?extends E> collection)

abstract void clear()

abstract boolean contains(Object object)

abstract boolean containsAll(Collection<?> collection)

abstract boolean equals(Object object)

abstract int hashCode()

abstract boolean isEmpty()

abstract Iterator<E> iterator()

abstract boolean remove(Object object)

abstract boolean removeAll(Collection<?> collection)

abstract boolean retainAll(Collection<?> collection)

abstract int size()

abstract<T> T[]toArray(T[]array)

abstract Object[]toArray()

// 相比与Collection,List新增的API:

abstract void add(int location,E object)

abstract boolean addAll(int location,Collection<?extends E> collection)

abstract E get(int location)

abstract int indexOf(Object object)

abstract int lastIndexOf(Object object)

abstract ListIterator<E> listIterator(int location)

abstract ListIterator<E> listIterator()

abstract E remove(int location)

abstract E set(int location,E object)

 

下面是源码,搂一搂,秒懂:

package java.util;
import java.util.function.UnaryOperator;

//继承collection的list接口
public interface List<E> extends Collection<E> {

//集合内子集个数
    int size();
//集合是否是空
    boolean isEmpty();
//集合是否包含
    boolean contains(Object o);
//迭代方法
    Iterator<E> iterator();
//集合转变成数组
    Object[] toArray();

//转变成泛型数组
    <T> T[] toArray(T[] a);

//添加
    boolean add(E e);
//删除
    boolean remove(Object o);

//包含集合
    boolean containsAll(Collection<?> c);
//添加集合    

boolean addAll(Collection<? extends E> c);
//截取添加集合部分

boolean addAll(int index, Collection<? extends E> c);
//删除集合

boolean removeAll(Collection<?> c);
//取集合交集

boolean retainAll(Collection<?> c);
//替换部分集合

default void replaceAll(UnaryOperator<E> operator) {
        Objects.requireNonNull(operator);
        final ListIterator<E> li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }

//对集合进行排序
    @SuppressWarnings({"unchecked", "rawtypes"})
    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);
        }
    }
//清空集合
    void clear();

//比较是否相等
    boolean equals(Object o);

//生成对应哈希码
    int hashCode();

//得到索引位置元素
    E get(int index);

//设置该索引位置元素
    E set(int index, E element);

//在改索引位置下添加内容
    void add(int index, E element);

//移除该位置下内容
    E remove(int index);

//返回该元素索引值
    int indexOf(Object o);

//索引最后一个值
    int lastIndexOf(Object o);
//迭代方法

ListIterator<E> listIterator();
    ListIterator<E> listIterator(int index);
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值