集合类源码之List(三)

import java.util.Objects;
import java.util.function.UnaryOperator;

/**
 * @Classname List:是Collection三大直接子接口之一,其他两大子接口包括Set和Queue接口
 * @see:List针对线性表结构的,提供了对位置以及子表的操作,其数据可以为空,也可以重复,可以为null
 * @note:List的实现类主要包括ArrayList\LinkedList\Vector。其中ArrayList作为默认选择,其本质上是一个数组
 * @note:当插入、删除频繁时,使用LinkedList,其本质上是一个双向链表,Vector总是比ArrayList慢,尽量避免使用它
 * @Version 1.0
 */
public interface List<E> extends Collection<E> {
    boolean equals(Object other);
//	新增的默认实现方法,通过Iterator的方式对每个元素进行指定的操作
	default void replaceAll(UnaryOperator<E> operator) {
		Objects.requireNonNull(operator);
		final ListIterator<E> li = this.listIterator();
		while(li.hasNext()) {
			li.set(operator.apply(li.next()));
		}
	}
	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);
        }
    }
	/**
	 * @Title:跟迭代相关的方法
	 * @note:List继承了Collection的iterator()方法,可以获取Iterator,实现向后遍历
	 * @note:List还可以通过listIterator()方法,可以获取更强大的listIterator,进行向前向后遍历,
	 *       同时允许在使用next()或previous()方法后进行add,remove,set等操作
	 */	
//	ListIterator继承于Iterator,主要增加了向前遍历、向后遍历的功能
	ListIterator<E> listIterator();
//	从指定位置开始,返回一个ListIterator
	ListIterator<E> listIterator(int index);
	/**
	 * @Title:跟位置相关的方法
	 */
//	获取指定位置的元素
	E get(int index);
//	修改指定位置元素的值
	E set(int index, E element);
//	在指定的位置添加元素
	void add(int index, E element);
//	在指定的位置移除一个元素
	E remove(int index);
//	在集合的指定位置插入当前集合
	boolean addall(int index,Collection<E> c);
	/**
	 * @Title:跟搜索相关的方法
	 */	
//	返回一个元素在集合中第一次出现的位置
	int indexOf(Object o);
//	返回一个元素在集合中最后一次出现的位置
	int lastIndexOf(Object o);
	/**
	 * @Title:跟范围性操作相关的方法
	 * @note:返回一个范围[fromIndex,toIndex)子集合,注意这是个左闭右开
	 * @note:这里并不是把List的范围元素拷贝进subList中,两者依旧是指向的同一个引用,因此对subList的操作依旧会原有的List,代码可以见AbstractList
	 */	
	List<E> subList(int fromIndex, int toIndex);
	/**
	 * @Title:跟转换相关的方法
	 */
	// 返回一个包含List中所有元素的数组
	Object[] toArray();
	// 作用同上,不同的是当数组 array 的长度比 List集合元素个数多时,会使用数组 array 保存 List 中的元素;
	// 否则会创建一个新的 数组存放 List 中的所有元素
	<T> T[] toArray(T[] a);
}
/**
 * 1.List和Array的区别?
 * 		(1)Array可以存放任何类型,List不可以存放基本数据类型,必须要包装
 * 		(2)Array不可以动态增长,List可以动态增长,且ArrayList有扩容机制,LinkedList没有扩容机制可以无限增长,因为它是双向链表
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值