java如何在java中实现LinkedList到ArrayList的转换?

java如何在java中实现LinkedList到ArrayList的转换?,java,performance,arraylist,linked-list,big-o,Java,Performance,Arraylist,Linked List,Big O,我正在实现一个公共方法,它需要一个能够处理两端插入的数据结构。由于ArrayList.add(0,key)将花费O(N)时间,因此我决定使用LinkedList来代替-add和addFirst方法都应该花费O(1)时间 但是,为了使用现有的API,我的方法需要返回一个ArrayList。 因此,我有两种方法: (1) 使用LinkedList, 执行所有N元素的添加,其中N/2将添加到前面,而N/2将添加到末尾。 然后通过调用ArrayList构造函数将此LinkedList转换为ArrayLi

我正在实现一个公共方法,它需要一个能够处理两端插入的数据结构。由于
ArrayList.add(0,key)
将花费O(N)时间,因此我决定使用
LinkedList
来代替-add和
addFirst
方法都应该花费O(1)时间

但是,为了使用现有的API,我的方法需要返回一个
ArrayList
。 因此,我有两种方法:

(1) 使用
LinkedList
, 执行所有N元素的添加,其中N/2将添加到前面,而N/2将添加到末尾。 然后通过调用
ArrayList
构造函数将此
LinkedList
转换为
ArrayList
返回新的ArrayList(myLinkedList)

(2) 使用
ArrayList
并调用
ArrayList.add(key)
N/2元素添加到后面,然后调用
ArrayList.add(0,key)
N/2元素添加到前面。返回此
ArrayList

在时间复杂度方面,谁能评论哪个选项更优化?我不确定Java如何实现
ArrayList
的构造函数,这是决定哪个选项更好的关键因素


谢谢。

第一个方法在列表中迭代:

按照集合迭代器返回的顺序,构造包含指定集合元素的列表

您可以合理地推断,它使用了
迭代器
接口

第二种方法将在每次添加到前面时移动元素(并每隔一段时间调整一次大小):

,E)

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引中)

考虑到有关函数的官方假设,第一种方法更有效


仅供参考:使用
LinkedList可以获得更多里程数。为了排列

我建议您使用
ArrayDesign
,它比
LinkedList
更快地在两端插入元素,并且占用更少的内存。然后使用方法#1将其转换为
ArrayList

输入方法时您知道n的值吗?源代码可用。。但是可以肯定的是,
ArrayList
的复制构造函数基于O(N)迭代器。这是一个链接,可以打开ArrayList构造函数的jdk实现,@RichardSitze-no,它基于toArray(),在ArrayList中比在LinkedList@anoopelias感谢您指出开放jdk实现。由于某种原因,我昨晚没能找到它。