java数据结构 - list

313 阅读1分钟

list是一种有序的数据结构,能够精确控制元素被插入的位置,能够通过元素的索引访问到元素。相比于set,list允许重复的元素(重复是指equals)。List提供了一个iterator:ListIterator用来提供元素的插入,删除,双向访问(当然还有iterator提供的其他方法)

List接口提供了如下的方法

int size();//元素个数(如果超过了MAX_VALUE,也返回MAX_VALUE)
boolean isEmpty();
boolean contains(Object o);//list至少包含一个元素e满足:o==null?e==null:o.equals(e)
Iterator<E> iterator();
Object[] toArray();//开辟一个新数组保存list的元素(即使这个list是由array实现)
<T> T[] toArray(T[] a);//返回T[]类型的数组。如果a够存放就返回a,否则返回一个包含所有元素的新数组。如果a空间比list还大,那a中紧跟着list中最后一个元素的元素变成null
boolean add(E e);
boolean remove(Object o);//删除第一个元素e,满足o==null?e==null:o.equals(e)
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);//把不在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()));
        }
    }
//如果c为null,要求list中的元素实现comparable接口
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);
List<E> subList(int fromIndex, int toIndex);
//pay attention to this.
default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }