JDK源码--List


案例使用的是JDK8的API


1.介绍

java.util.List是一个接口,该接口继承了Collection接口。

2.关注点

  • Collection(父接口)
  • Set(接口)
  • ArrayList(子类实现)
  • LinkedList(子类实现)
  • Vector(子类实现)
  • Arrays#asList(Object[])(工具类转换方法)
  • Collections#nCopies(int, Object)(工具类转换方法)
  • Collections#EMPTY_LIST(工具类转换方法)
  • AbstractList(相关抽象类)
  • AbstractSequentialList(相关抽象类)

3.源码剖析

public interface List<E> extends Collection<E> {

  /**
  * 定义addAll方法,从某个index开始插入指定集合实例
  */
  boolean addAll(int index, Collection<? extends E> c);

  /**
  * 定义removeAll方法,从某个index开始删除指定集合实例
  */
  boolean removeAll(Collection<?> c);

  /**
  * 定义removeAll方法,从某个index开始删除指定集合实例
  */
  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()));
    }
  }

  /**  
  * jdk1.8新增
  * 大意为:
  * 定义sort方法,根据传递参数的函数式,传递内容是接口类型
  * 该接口定义了Comparator函数,该函数传递给Arrays.sort进行判断并排序

  * 并根据排序结果,使用迭代器迭代并重新set进List
  * @since 1.8
  */
  @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);
    }
  } 

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

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

  /**
  * List要求,定义add方法,在指定index添加指定元素
  */
  void add(int index, E element);

  /**
  * List要求,定义remove方法,从指定的index删除该元素并重新调整List
  */
  E remove(int index);

  /**
  * List要求,定义indexOf方法,正序查询指定元素第一次出现的index序号
  */
  int indexOf(Object o);

  /**
  * List要求,定义lastIndexOf方法,倒叙查询指定元素第一次出现的的index序号
  */
  int lastIndexOf(Object o);

  /**
  * List要求,定义ListIterator迭代器方法,获取该List的迭代器
  */
  ListIterator<E> listIterator();

  /**
  * List要求,定义ListIterator迭代器方法,获取从指定index开始的指定迭代器
  */
  ListIterator<E> listIterator(int index);

  /**
  * List要求,定义subList方法,从起始和结束index拆分出新的list
  */
  List<E> subList(int fromIndex, int toIndex);

  /**
  * jdk1.8新增
  * 大意为:
  * 根据当前的list内容进行排序,进行迭代器拆分,拆分成新的迭代器
  * 用于多线程迭代使用
  * @since 1.8
  */
  @Override
  default Spliterator<E> spliterator() {
    return Spliterators.spliterator(this, Spliterator.ORDERED);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值