繁体   English   中英

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

[英]How does java implement the conversion of LinkedList to ArrayList in Java?

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

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

(1)使用LinkedList ,做N个元素的所有添加,其中N / 2将被添加到前面, N / 2将被添加到结尾。 然后通过调用ArrayList构造函数将此LinkedList转换为ArrayListreturn new ArrayList<key>(myLinkedList);

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

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

谢谢。

第一种方法遍历列表:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection)

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

您可以合理推断,它使用iterator接口。

每次添加到前面时,第二种方法都会移动元素(并且每隔一段时间调整一次):

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#add(int,E

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

鉴于官方对功能的假设,第一种方法更有效。

仅供参考:您可以使用LinkedList.toArray获得更多里程

我建议你使用一个比LinkedList更快的ArrayDeque来在两端插入元素并消耗更少的内存。 然后使用方法#1将其转换为ArrayList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM