zl程序教程

您现在的位置是:首页 >  其它

当前栏目

LinkedList的用法小结

用法 小结 LinkedList
2023-09-14 09:00:57 时间
public class LinkedList E 
extends AbstractSequentialList E implements List E , Deque E , Cloneable, Serializable

List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列双端队列

此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。

所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。

注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:

 List list = Collections.synchronizedList(new LinkedList(...));

此类的 iterator 和 listIterator 方法返回的迭代器是快速失败 的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。

注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

此类是 Java Collections Framework 的成员。

从以下版本开始: 另请参见: ListArrayListVector序列化表格
toArray(T[] a) 
          返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。
listIterator
public ListIterator E listIterator(int index)
返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。遵守 List.listIterator(int) 的常规协定。

列表迭代器是快速失败 的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过列表迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,列表迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。


toArray
public Object[] toArray()
返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。

由于此列表不维护对返回数组的任何引用,因而它将是“安全的”。(换句话说,此方法必须分配一个新数组)。因此,调用者可以随意修改返回的数组。

此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。


toArray
public T T[] toArray(T[] a)
返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。如果指定数组能容纳列表,则在其中返回该列表。否则,分配具有指定数组的运行时类型和此列表大小的新数组。

如果指定数组能容纳列表,并有剩余空间(即数组比列表元素多),则紧跟在列表末尾的数组元素会被设置为 null。(只有 在调用者知道列表不包含任何 null 元素时,才可使用此方法来确定列表的长度。)

像 toArray() 方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型上进行精确控制,在某些情况下,可以用来节省分配开销。

假定 x 是只包含字符串的一个已知列表。以下代码可用来将该列表转储到一个新分配的 String 数组:

 String[] y = x.toArray(new String[0]);
注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 接口 Collection E  中的 toArray 接口 List E  中的 toArray 类 AbstractCollection E  中的 toArray
a - 要在其中存储列表元素的数组(如果它足够大);否则,为其分配具有相同运行时类型的新数组 包含列表元素的数组 ArrayStoreException - 如果指定数组的运行时类型不是此列表中每个元素的运行时类型的超类型

NullPointerException - 如果指定的数组为 null


转载:

http://blog.csdn.net/chaoyu168/article/details/49329189
ArrayList与LinkedList区别源码分析 1、ArrayList是基于数组,LinkedList是基于链表 2、基于数组的ArrayList对于根据索引值查找比较高效;基于链表的LinkedList对于增加、删除操作比较高效 3、剖析CRUD:
Java中ArrayList,LinkedList,Vector三者的异同点及其使用场景和ArrayList的一些常用方法 相同点:三者存储的都是有序,可重复的数据。 异:①:ArrayList底层存储类型树Object数组,而LinkedList底层是双向链表 ②:ArrayList和Vector调用创建空参构造器创建对象时,默认的size是10,但是当自动扩容的时候,ArrayList扩容为当前容器size的1.5倍,而Vector自动扩容为当前的2倍。 使用场景:①:当查找操作比较多时,使用ArrayList,因为其底层是数组实现,可以根据角标查找,时间复杂度是O(1),而LinkedList底层是双向...
List中的ArrayList和LinkedList源码分析 List是在面试中经常会问的一点,在我们面试中知道的仅仅是List是单列集合Collection下的一个实现类, List的实现接口又有几个,一个是ArrayList,还有一个是LinkedList,还有Vector。这次我们就来看看这三个类的源码。
List中的ArrayList和LinkedList源码分析(二) List是在面试中经常会问的一点,在我们面试中知道的仅仅是List是单列集合Collection下的一个实现类, List的实现接口又有几个,一个是ArrayList,还有一个是LinkedList,还有Vector。这次我们就来看看这三个类的源码。
【优雅代码】13-linkedList插入真的比arrayList快么 在学习中,常规的方法总是先去模仿,硬性的接收知识,但是实际情况往往出人意料,等到构建起大体框架后再去探寻实际情况