java初始化ArrayList


初始化ArrayList我們一般這樣寫:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

我重構代碼做:

ArrayList<String> places = new ArrayList<String>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

有這樣做的更好的方法嗎?

解決方法 1:

其實,可能要初始化的"最佳"方式,ArrayList 是你寫的方法,因為它不需要創建一個新的 List 以任何方式:

ArrayList<String> list = new ArrayList<String>();
    list.add("A");
    list.add("B");
    list.add("C");

漁獲是相當多的鍵入所需,請參閱 list 實例。

有如使一個匿名的內部類的一個實例初始值設定項 (也稱為一種"雙大括號初始化") 的方法:

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}}

不過,我不太喜歡該方法,因為什么你最終是一個類的子類 ArrayList 有一個實例初始值設定項和這類只是為了創建一個對象 — — 只是看起來像我有點大材小用。

有何好是如果接受 項目硬幣 收集文本的建議,我們可以有 Java 7 中的列表中文字:

List<String> list = ["A", "B", "C"];

不幸的是它不會幫助您在這里,因為它將初始化一個 List,而不是 ArrayList,此外,它尚未提供,如果它以往任何時候都將和。

解決方法 2:

如果你,只是將它聲明為列表中沒有要 ArrayList,它會更簡單呢?

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

解決方法 3:

import com.google.common.collect.ImmutableList;

....

List<String> places = ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");

解決方法 4:

漂亮的很多,最簡單的方法就是 List<String> strings = new ArrayList<String>(asList("foo", "bar", "baz")),如果您必須有一個 ArrayList,否則您應該在大多數情況下只是使用List<String> strings = asList("foo", "bar", "baz")

你說你已宣布作為列表一個 ArrayList 在您的代碼中,但您不應該做的除非您正在使用的一些成員 ArrayList 在這並不是 List,例如 ArrayList.ensureCapacity()

通常您應該只是聲明變量,您要使用,它的列表通常是最通用接口的 List,和初始化它們在具體的實施,例如 ArrayListLinkedList

使用不實現,否則為你會發現您要在多個位置更改,當您想要使用另一種實現的接口。

另一個例子將總是聲明變量,一個 InputStream 即使它通常是一個 FileInputStream,這是因為一天很快就您或其他人會想要使用一些另類的 InputStream

解決方法 5:

您可以創建一個工廠方法:

public static ArrayList<String> createArrayList(String ... elements) {
  ArrayList<String> list = new ArrayList<String>();
  for (String element : elements) {
    list.add(element);
  }
  return list;
}

....

ArrayList<String> places = createArrayList(
  "São Paulo", "Rio de Janeiro", "Brasília");

但並不比你第一次的重構。

更新: 更大的靈活性,它可以是一種通用:

public static <T> ArrayList<T> createArrayList(T ... elements) { 
  ArrayList<T> list = new ArrayList<T>();  
  for (T element : elements) {
    list.add(element);
  }
  return list;
}

解決方法 6:

只是注意到它在一個很簡單的工作方法,如下所示:

 ArrayList arrList = new ArrayList() {"1",2,3,"4" };

List<Customer> listCustomer = new List<Customer>() { new Customer(), new Customer(), new Customer() };

這 C# 3.0 不雙支撐所需的工作。希望這有助於。

解決方法 7:

若要設置列表填充 N 的默認對象的副本:

ArrayList<Object> list = new ArrayList<Object>(
Collections.nCopies(1000, new Object()));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM