我愿意創(chuàng)建列表的選項(xiàng),以測試的東西。
我正在做:
ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");
我重構(gòu)代碼做:
ArrayList<String> places = new ArrayList<String>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
有這樣做的更好的方法嗎?
感謝閱讀 !
其實(shí),可能要初始化的"最佳"方式,ArrayList
是你寫的方法,因?yàn)樗恍枰獎?chuàng)建一個新的 List
以任何方式:
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
漁獲是相當(dāng)多的鍵入所需,請參閱 list
實(shí)例。
有如使一個匿名的內(nèi)部類的一個實(shí)例初始值設(shè)定項(xiàng) (也稱為一種"雙大括號初始化") 的方法:
ArrayList<String> list = new ArrayList<String>() {{
add("A");
add("B");
add("C");
}}
不過,我不太喜歡該方法,因?yàn)槭裁茨阕罱K是一個類的子類 ArrayList
有一個實(shí)例初始值設(shè)定項(xiàng)和這類只是為了創(chuàng)建一個對象 — — 只是看起來像我有點(diǎn)大材小用。
有何好是如果接受 項(xiàng)目硬幣 收集文本的建議,我們可以有 Java 7 中的列表中文字:
List<String> list = ["A", "B", "C"];
不幸的是它不會幫助您在這里,因?yàn)樗鼘⒊跏蓟粋€ List
,而不是 ArrayList
,此外,它尚未提供,如果它以往任何時候都將和。
如果你,只是將它聲明為列表中沒有要 ArrayList,它會更簡單呢?
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
import com.google.common.collect.ImmutableList;
....
List<String> places = ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");
漂亮的很多,最簡單的方法就是 List<String> strings = new ArrayList<String>(asList("foo", "bar", "baz"))
,如果您必須有一個 ArrayList
,否則您應(yīng)該在大多數(shù)情況下只是使用List<String> strings = asList("foo", "bar", "baz")
你說你已宣布作為列表一個 ArrayList
在您的代碼中,但您不應(yīng)該做的除非您正在使用的一些成員 ArrayList
在這并不是List
,例如 ArrayList.ensureCapacity()
。
通常您應(yīng)該只是聲明變量,您要使用,它的列表通常是最通用接口的 List
,和初始化它們在具體的實(shí)施,例如 ArrayList
或 LinkedList
。
使用不實(shí)現(xiàn),否則為你會發(fā)現(xiàn)您要在多個位置更改,當(dāng)您想要使用另一種實(shí)現(xiàn)的接口。
另一個例子將總是聲明變量,一個 InputStream
即使它通常是一個 FileInputStream
,這是因?yàn)橐惶旌芸炀湍蚱渌藭胍褂靡恍┝眍惖?nbsp;InputStream
。
您可以創(chuàng)建一個工廠方法:
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");
但并不比你第一次的重構(gòu)。
更新: 更大的靈活性,它可以是一種通用:
public static <T> ArrayList<T> createArrayList(T ... elements) {
ArrayList<T> list = new ArrayList<T>();
for (T element : elements) {
list.add(element);
}
return list;
}
只是注意到它在一個很簡單的工作方法,如下所示:
ArrayList arrList = new ArrayList() {"1",2,3,"4" };
List<Customer> listCustomer = new List<Customer>() { new Customer(), new Customer(), new Customer() };
這 C# 3.0 不雙支撐所需的工作。希望這有助于。
若要設(shè)置列表填充 N 的默認(rèn)對象的副本:
ArrayList<Object> list = new ArrayList<Object>(
Collections.nCopies(1000, new Object()));