list承诺可以将元素维护在特定的序列中。list接口在collection的基础上添加了大量的方法,使得可以在list的中间插入和删除元素。list与 set 不同,列表通常允许重复的元素。并且存放的顺序与插入的顺序一致。
list接口的常用方法有:
<code>**[add](http://www.cnblogs.com/java/util/list.html#add(e))**([e](http://www.cnblogs.com/java/util/list.html "list 中的类型参数") o)</code> :将指定对象加入到列表中。
<code>**[add](http://www.cnblogs.com/java/util/list.html#add(int, e))**(int index, [e](http://www.cnblogs.com/java/util/list.html "list 中的类型参数") element)</code> :将对象加入到指定位置处。
<code>**[addall](http://www.cnblogs.com/java/util/list.html#addall(java.util.collection))**([collection](http://www.cnblogs.com/java/util/collection.html "java.util 中的接口")<? extends [e](http://www.cnblogs.com/java/util/list.html "list 中的类型参数")> c)</code> :追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。
<code>**[addall](http://www.cnblogs.com/java/util/list.html#addall(int, java.util.collection))**(int index, [collection](http://www.cnblogs.com/java/util/collection.html "java.util 中的接口")<? extends [e](http://www.cnblogs.com/java/util/list.html "list 中的类型参数")> c) :将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。</code>
<code>**[remove](http://www.cnblogs.com/java/util/list.html#remove(int))**(int index)</code> :移除某个位置上的元素。
<code>**[remove](http://www.cnblogs.com/java/util/list.html#remove(java.lang.object))**([object](http://www.cnblogs.com/java/lang/object.html "java.lang 中的类") o)</code> : 移除列表中出现的首个指定元素。
<code>**[set](http://www.cnblogs.com/java/util/list.html#set(int, e))**(int index, [e](http://www.cnblogs.com/java/util/list.html "list 中的类型参数") element) :用指定元素替换列表中指定位置的元素。</code>
<code>**[size](http://www.cnblogs.com/java/util/list.html#size())**()</code> :返回列表大小。
…….
常用的有两种list类型:arraylist和linkedlist。
<a></a>
一、arraylist
arraylist擅长于随即访问元素,因为它像数组一样提供了下标,可以根据下标直接访问,所以可以将arraylist看作可扩充自身尺寸的数组。但是在arraylist的中间插入和移除元素时较慢。
输出结果为:
由输出结果的1-5行可以看出,list存放元素的顺序与加入的顺序一致。
二、linkedlist
linkedlist通过代价较低的在list中间进行插入和删除操作,提供了优化的顺序访问。但是在随即访问方面相对比较慢。
下面举个例子来演示linkedlist和arraylist随即访问的速度:
程序运行结果为:
很明显arraylist随即访问比linkedlist快的多,因为linkedlist是以链表的现实存储的。