我想知道什么是时间复杂的大O(n)
符号]的 ArrayList
到Array
转换:
ArrayList assetTradingList = new ArrayList(); assetTradingList.add("Stocks trading"); assetTradingList.add("futures and option trading"); assetTradingList.add("electronic trading"); assetTradingList.add("forex trading"); assetTradingList.add("gold trading"); assetTradingList.add("fixed income bond trading"); String [] assetTradingArray = new String[assetTradingList.size()]; assetTradingArray.toArray(assetTradingArray);
类似地,数组以下列方式列出的时间复杂度是多少:
方法1使用Arrays.asList
:
String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List assetList = Arrays.asList(asset);
方法2使用collections.addAll
:
List assetList = new ArrayList(); String[] asset = {"equity", "stocks", "gold", "foreign exchange", "fixed income", "futures", "options"}; Collections.addAll(assetList, asset);
方法3 addAll
:
ArrayList newAssetList = new ArrayList(); newAssetList.addAll(Arrays.asList(asset));
我对来回复制的开销感兴趣的原因是因为在典型的访谈中,问题来自诸如此类given an array of pre-order traversal elements, convert to binary search tree
,涉及到arrays
.与List
提供一大堆诸如操作remove
等,这将使其简单的使用代码List
比Array
.
在这种情况下,我想保护我使用列表list
数组`说"我会先将数组转换为List,因为这个操作的开销并不多(希望如此)".
建议用于来回复制元素的任何更好的方法arrays
都会更快.
谢谢
这似乎Arrays.asList(T[]);
是最快的O(1)
因为该方法返回不可修改的List
,所以没有理由将引用复制到新的数据结构.该方法仅使用给定数组作为List
它返回的不可修改实现的后备数组.
其他方法似乎是将每个元素逐个复制到底层数据结构.ArrayList#toArray(..)
使用System.arraycopy(..)
内心深处(O(n)
但更快,因为它本地完成).Collections.addAll(..)
循环遍历数组元素(O(n)
).
使用时要小心ArrayList
.当达到其容量时,背衬阵列的尺寸加倍,即.当它满了.这需要O(n)
时间.ArrayList
除非您知道从一开始就添加了多少元素并使用该大小创建它,否则添加到一个可能不是最好的想法.