数据结构之List
来源:互联网 发布:协同过滤算法 python 编辑:程序博客网 时间:2024/06/05 17:06
直接上JDK源码
List<E>源代码
public interface Listextends Collection { int size(); boolean isEmpty(); boolean contains(Object o); Iterator iterator(); Object[] toArray(); 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 operator) { Objects.requireNonNull(operator); final ListIterator li = this.listIterator(); while (li.hasNext()) { li.set(operator.apply(li.next())); } } default void sort(Comparator super E> c) { Collections.sort(this, c); } 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 listIterator(); ListIterator listIterator(int index); List subList(int fromIndex, int toIndex); @Override default Spliterator spliterator() { return Spliterators.spliterator(this, Spliterator.ORDERED); }}
Collection<E>源代码
public interface Collectionextends Iterable { int size(); boolean isEmpty(); boolean contains(Object o); Iterator iterator(); Object[] toArray(); T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection> c); boolean addAll(Collection extends E> c); boolean removeAll(Collection> c); default boolean removeIf(Predicate super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed; } boolean retainAll(Collection> c); void clear(); boolean equals(Object o); int hashCode(); @Override default Spliterator spliterator() { return Spliterators.spliterator(this, 0); } default Stream stream() { return StreamSupport.stream(spliterator(), false); } default Stream parallelStream() { return StreamSupport.stream(spliterator(), true); }}
Iterable<E>源代码
public interface Iterable{ Iterator iterator(); default void forEach(Consumer super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } default Spliterator spliterator() { return Spliterators.spliteratorUnknownSize(iterator(), 0); }}
List的实现类:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList,RoleUnresolvedList, Stack, Vector
这里只说常用的ArrayList、LinkedList、Stack、Vector
java.util.ArrayList< E >
ArrayList有点类似于数组,相比较于数组而言,ArrayList可以动态的更改元素个数,相对于数组较为灵活。
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
new ArrayList(); 构造一个初始容量为 10 的空列表
java.util.Vector< E >
Vector和ArrayList的区别在于Vector是线程同步的。Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
每个向量会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。
java.util.LinkedList< E >
与上面介绍的类一样,LinkedList也实现了List接口,在其内部以链表的方式维护元素,LinkedList具备List接口的所有方法,另外,LinkedList类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。java.util.Stack< E >
Stack类继承自Vector,所以Stack和Vector一样也是线程安全的。Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。其他不常用的可以自己下JDK源码看看
阅读全文
0 0
- java数据结构之List
- 数据结构List之ArrayList
- 数据结构List之Vector
- 数据结构List之LinkedList
- 【二】数据结构之List
- 数据结构之List
- 数据结构之vector&list
- Libevent分解之数据结构List
- 数据结构之list(用链表实现)
- Python基础数据结构之list
- Redis的数据结构之List
- scala数据结构之List列表
- Python数据结构之——list
- 常用数据结构之顺序结构List实现
- 数据结构之 链表-Double-Ended List(2)
- 基本数据结构之链表(list)
- Libevent 分解之数据结构 Singly-linked List
- 数据结构之list(用数组实现)
- Javascript中Event事件的属性大全
- 批处理
- xgboost 包使用
- POJ 1318 Word Amalgamation 笔记
- 自动化功能测试实战
- 数据结构之List
- oracle 11g 修改密码
- laravel(一)-为什么要使用框架
- ui-router路由 很详细
- HDU-4463 Outlets(次小生成树)
- TCP 的拥塞控制
- Xcode_自动构建ipa包
- android之新闻客户端
- 链表的初始化