-----------------------java的List实现类------------------------------
Synchronized线程同步
ArrayList类
List接口的大小可变数组的实现。实现了所有可选列表操作,
并允许包括null在内的所有元素。除了实现List接口外,此类
还提供一些方法来操作内部用来储存列表的数组的大小。
是有序的集合,长度不固定。
不是线程安全的。
效率高。
LinkedList类
List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
不是线程安全的。
堆栈:后进先出,先进后出。(Push进、pop出)
队列:先进先出,后进后出。
构造方法摘要 |
|
|
|
|
方法摘要 |
||
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
||
|
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
例子:
publicstaticvoidmain(String[] args) {
//创建一个List集合
LinkedList list = newLinkedList<>();
list.add("松江");
list.add("流浪");
list.add("阿道夫");
System.out.println(list);
//把元素插入到列表的头
list.addFirst("百胜");
//把元素插入到列表的最尾端
list.addLast("吴昊");
System.out.println(list);
//获得头元素,没有移除
Object obj = list.element();
System.out.println(obj);
System.out.println(list);
//出栈
Object obj1 = list.poll();
System.out.println(obj1);
System.out.println(list);
//加栈
list.push("武松");
System.out.println(list);
}
}
结果:
[松江, 流浪, 阿道夫]
[百胜, 松江, 流浪, 阿道夫, 吴昊]
百胜
[百胜, 松江, 流浪, 阿道夫, 吴昊]
百胜
[松江, 流浪, 阿道夫, 吴昊]
[武松, 松江, 流浪, 阿道夫, 吴昊]
------------------Vector类--------------------------
是线程安全的,是同步的。
java.util
类 Vector<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
直接已知子类:
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
Vector
类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector
的大小可以根据需要增大或缩小,以适应创建 Vector
后进行添加或移除项的操作。
每个向量会试图通过维护 capacity
和capacityIncrement
来优化存储管理。capacity
始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按capacityIncrement
的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。
由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。
注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException
。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。
从 Java 2 平台 v1.2 开始,此类改进为可以实现List
接口,使它成为 JavaCollections Framework 的成员。与新 collection 实现不同,Vector
是同步的。
从以下版本开始:
JDK1.0
另请参见:
Collection
,List
,ArrayList
,LinkedList
,序列化表格
|
|
|
|
|
|
从类 java.util.AbstractList 继承的字段 |
构造方法摘要 |
|
|
|
|
|
|
|
|
方法摘要 |
||
|
||
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
||
|
|
|
|
||
|
||
|
||
|
|
|
|
||
|
||
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
例子:
publicclassCollectionTest10 {
publicstaticvoidmain(String[] args) {
Vector v = new Vector();
v.add("宋江");
v.add("白胜");
v.add("刘唐");
//获得集合中的每个元素,枚举
Enumeration enums = v.elements();
while(enums.hasMoreElements()){
//可以一边遍历一边添加
Object obj = enums.nextElement();
if("白胜" == obj)
v.add("娇羞");
System.out.println(obj);
}
}
}
结果:
宋江
白胜
刘唐
娇羞