0
点赞
收藏
分享

微信扫一扫

JDK源码 – 容器 – List

高子歌 2023-02-20 阅读 139


JDK源码 – 容器 – List

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

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

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

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

实现继承Collection:

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

关于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 条评论