2017-03-02 87 views
0

我們可以從陣列中的以下3種方式(在Java 7),

1.使用Arrays.asList()
2.使用ArrayList.addAll()
3創建列表。使用Collections.addAll()從創建數組列表 - 3種方式哪種更好

// Using Arrays.asList() 

String[] stringArray = {"foo", "bar", "baz"}; 
List<String> stringList = new ArrayList<>(Arrays.asList(stringArray)); 

// Using ArrayList.addAll() 

String[] stringArray = {"foo", "bar", "baz"}; 
ArrayList<String> list = new ArrayList<>(); 
list.addAll(Arrays.asList(stringArray)); 

// Using Collections.addAll() 

String[] stringArray = {"foo", "bar", "baz"}; 
ArrayList<String> list = new ArrayList<>(); 
Collections.addAll(list, stringArray); 

哪一個是最好的,什麼情況?這三者之間有什麼區別嗎?

+1

顯然,第一個需要更少的代碼... –

+2

第一個和第二個是相同的。第三是庫代碼的一個很好的使用,但實際上也是第一和secodn相同。如果你以後不需要修改你的列表,我只需要'Arrays.asList(values)',因爲它需要最少的工作量('O(1)'來包裝數組)。 –

+1

@ M.Prokhorov實際上,3有點不同,因爲它不會創建中間無法修改的列表,而是直接在循環中添加元素。 –

回答

4

的主要差別如下:

Arrays.asList()創建一個不可調整大小List,這裏僅作爲一箇中間訪問new ArrayList(List)構造。如果您不需要可變列表,只需使用Arrays.asList()是最簡單/最乾淨的解決方案。

ArrayList.addAll()將然而添加的東西到現有列表(可能已經在示例代碼包含數據不像),「標準」的方式......

Collections.addAll()是一個方便的方法:

此便利方法的行爲與 c.addAll(Arrays.asList(elements))的行爲相同,但在大多數實施中,此方法可能運行的速度顯着快於 。

三者之間的任何「更好」都完全取決於您的情況,而實際上它主要是代碼風格問題,而不是性能相關。