List接口下集合特点

List接口

public interface List<E> extends Collection<E> 

List是Collection接口的子接口,也是最常用的接口。此接口对Collection接口进行了大量的扩充,里面的内容是允许重复允许为NULL的并且有序(插入顺序)。

List接口的实现类:ArrayList、LinkedList、Vector、Stack

1.ArrayList

底层实现:数组

ArrayList的继承关系:

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

ArrayList继承了AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable这些接口。

ArrayList实现了List接口:存放单值,里面的内容是允许重复允许为NULL的并且有序(插入的顺序)。
ArrayList实现了RandomAccess接口:这个是一个标记性接口,表示ArrayList支持快速随机访问。在ArrayList中,我们可以通过元素的序号快速获取元素对象,这就是快速随机访问。
ArrayList实现了Cloneable接口:集合可以使用Object.Clone()方法。
ArrayList实现了java.io.Serializable接口:可序列化,表示ArrayList可以进行序列化操作。

ArrayList使用场景:

(1)适合做随机访问操作,不适合做随机的插入或者删除操作。
	原因:ArrayList的底层是数组,随机访问可以根据下标快速获取数据。随机插入删除时,ArrayList会伴随大量的数据移动工作,是非常耗时的。
(2)ArrayList中的操作是线程不安全的。建议在单线程中才使用ArrayList。

ArrayList主要方法:

1.添加:
	 boolean add(E e) :将指定的元素追加到此列表的末尾。
	 void add(int index, E element):在此列表中的指定位置插入指定的元素。
	 boolean addAll(Collection<? extends E> c):按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。
	 boolean addAll(int index, Collection<? extends E> c):将指定集合中的所有元素插入到此列表中,从指定的位置开始。
2.删除:
	 E remove(int index):删除该列表中指定位置的元素。 
	 boolean remove(Object o):移除指定元素。
 	void clear():清空ArrayList内的所有元素,不减小数组容量。
 	void removeRange(int fromIndex, int toIndex):从此列表中删除所有索引为fromIndex 	(含)和toIndex之间的元素。
	 boolean removeAll(Collection<?> c):从此列表中删除指定集合中包含的所有元素。
	 boolean retainAll(Collection<?> c):仅保留此列表中包含在指定集合中的元素。
3.修改:
	E set(int index, E element):用指定的元素替换此列表中指定位置的元素。 
4.查询:
	E get(int index):返回此列表中指定位置的元素。
5.其他方法:
	void trimToSize():修改这个ArrayList实例的容量是列表的当前大小。
	void grow(int minCapacity):扩容。
	int size():返回此列表中的元素个数。 
	boolean isEmpty():判断ArrayList是否为空。
	boolean contains(Object o):判断元素是否存在于列表中。

2.LinkedList

底层实现:双向链表

LinkedList的继承关系:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

LinkedList继承了AbstractSequentialList,实现了 List, Deque, Cloneable, java.io.Serializable这些接口。

LinkedList是一个继承于AbstractSequentialList的双向链表。它也可以被当做堆栈、队列或双端队列进行使用。
LinkedList实现了List接口:能让它进行队列操作。
LinkedList实现了Deque接口:能将LinkedList当做双端队列使用。
LinkedList实现了Cloneable接口:集合可以使用Object.Clone()方法。
LinkedList实现了java.io.Serializable接口:可序列化,表示LinkedList可以进行序列化操作。

LinkedList使用场景:

(1)适合做插入删除操作,不适合做随机访问操作。
	原因:LinkedList底层是双向链表,增删操作就是在对应位置断开链表,然后在对应链表设置新元素的前后节点即可。随机访问时,LinkedList需要一个一个的遍历查询,查询效率很低。
(2)LinkedList中的操作是线程不安全的。

LinkedList主要方法:

1.添加:
	void addFirst(E e):在链表头部添加元素
	void addLast(E e):在链表尾部添加元素
	boolean add(E e):将元素添加到链表尾部
	void add(int index, E element):在指定位置添加元素
	boolean addAll(Collection<? extends E> c):将集合插入到链表尾部
	boolean addAll(int index, Collection<? extends E> c):将集合从指定位置开始插入
2.删除:
	E removeFirst():删除头节点
	E removeLast():删除尾节点
	E unlinkLast(Node<E> l):删除指定节点
	boolean remove(Object o):删除指定元素
	E remove():删除头节点
	E remove(int index):删除指定位置的元素
3.修改:
	E set(int index, E element):修改指定位置节点的元素值
4.查询:
	E getFirst():获取链表头节点的元素值
	E getLast():获取链表尾节点的元素值
	E get(int index):获取指定位置的元素值

3.Vector

底层实现:数组

Vector的继承关系:

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

Vector继承了AbstractList,实现了List、RandomAccess、Cloneable、 java.io.Serializable等接口。

Vector实现了List接口:能够进行队列操作。
Vector实现RandomAccess接口:能够快速随机访问(即通过索引值就能访问得到)。
Vector实现了Cloneable接口:集合可以使用Object.Clone()方法。

Vector使用场景:

Vector和ArrayList特点几乎是一样的。
与ArrayList不同的是,Vector中的操作是线程安全的。

Vector主要方法:

1.添加:
	synchronized boolean add(E e):在数组尾部添加一个元素
	void add(int index, E element):在数组指定位置index处添加元素
	synchronized boolean addAll(Collection<? extends E> c):
	synchronized boolean addAll(int index, Collection<? extends E> c):
2.删除:
	boolean remove(Object o):删除指定元素
	synchronized E remove(int index):删除指定位置元素
	synchronized void removeElementAt(int index):删除index位置的元素
	synchronized boolean removeElement(Object obj):在Vector中查找并删除元素
	synchronized void removeAllElements():删除Vector中的全部元素
	void clear():清空Vector
	synchronized boolean removeAll(Collection<?> c):删除指定集合中包含的所有元素
	synchronized boolean retainAll(Collection<?> c):保留包含在指定集合中的元素
	synchronized void removeRange(int fromIndex, int toIndex):删除fromIndex到toIndex的元素
3.修改:
	synchronized void setElementAt(E obj, int index):修改index位置的元素值
	synchronized E set(int index, E element):修改index位置的值
4.查询:
	synchronized E get(int index):获取index位置的元素

4.Stack

public class Stack<E> extends Vector<E>

底层实现:Stack继承自Vector,底层是通过数组实现的。

特性是:先进后出。Stack操作是线程安全的。

Stack主要方法:

E push(E item):将元素存入栈顶
synchronized E pop():返回栈顶元素,并将其从栈中删除
synchronized E peek():返回栈顶元素,不执行删除操作
boolean empty():判断栈是否为空
synchronized int search(Object o):查找“元素o”在栈中的位置:由栈底向栈顶方向数
发布了11 篇原创文章 · 获赞 0 · 访问量 138

猜你喜欢

转载自blog.csdn.net/baidu_41806513/article/details/104409759