我正在實現一個需要能夠處理兩端插入的數據結構的公共方法。由於ArrayList.add(0,key)
將採取O(N)時間,我決定使用一個LinkedList
代替 - 對add
和addFirst
方法都應該採取O(1)時間。java如何在Java中實現LinkedList到ArrayList的轉換?
但是,爲了使用現有的API,我的方法需要返回ArrayList
。 所以,我有兩種方法:
(1)使用LinkedList
, 做所有的加入其中N/2將被添加到前和N/2將被添加到所述Ñ元件結束。 然後通過調用ArrayList
構造轉換此LinkedList
到ArrayList
:
(2)使用ArrayList
和呼叫ArrayList.add(key)
到N/2元素添加到背面,並調用ArrayList.add(0,key)
添加N/2元素前方。返回這個ArrayList
。
任何人都可以評論哪個選項在時間複雜度方面更加優化?我不確定Java如何實現ArrayList
的構造函數 - 這是決定哪個選項更好的關鍵因素。
謝謝。
您是否知道輸入方法時n的值? – radai
源代碼可用..但是,基於O(N)迭代器的'ArrayList'的複製構造函數是安全的。 –
這是打開jdk實現ArrayList構造函數的鏈接,http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/ArrayList.java#ArrayList 。%3Cinit%3E%28java.util.Collection%29 – anoopelias