File tree Expand file tree Collapse file tree 2 files changed +57
-0
lines changed
Filter options
Expand file tree Collapse file tree 2 files changed +57
-0
lines changed
Original file line number Diff line number Diff line change @@ -34,6 +34,7 @@ stackoverflow-Java-top-qa
34
34
35
35
* [ 去掉烦人的“!=null"(判空语句] ( https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/avoiding-null-statements-in-java.md )
36
36
* [ 获取完整的堆栈信息] ( https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/get-current-stack-trace-in-java.md )
37
+ * [ 如何通过一行代码初始化ArrayList] ( https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/initialization-of-an-arraylist-in-one-line.md )
37
38
38
39
> 网络
39
40
Original file line number Diff line number Diff line change
1
+ ##如何通过一行代码初始化ArrayList
2
+
3
+ ###问题
4
+ 为了测试,我需要临时快速创建一个list。一开始我这样做:
5
+ ``` java
6
+ ArrayList<String > places = new ArrayList<String > ();
7
+ places. add(" Buenos Aires" );
8
+ places. add(" Córdoba" );
9
+ places. add(" La Plata" );
10
+ ```
11
+ 之后我重构了下
12
+ ``` java
13
+ ArrayList<String > places = new ArrayList<String > (
14
+ Arrays . asList(" Buenos Aires" , " Córdoba" , " La Plata" ));
15
+ ```
16
+ 是否有更加简便的方法呢?
17
+
18
+ ###回答
19
+
20
+ ####常见方式
21
+ 实际上,也许“最好”的方式,就是你写的这个方式,因为它不用再创建新的` List ` :
22
+ ```
23
+ ArrayList<String> list = new ArrayList<String>();
24
+ list.add("A");
25
+ list.add("B");
26
+ list.add("C");
27
+ ```
28
+ 只是这个方式看上去要多写些代码,让人郁闷
29
+
30
+ ####匿名内部类
31
+ 当然,还有其他方式,例如,写一个匿名内部类,然后在其中做初始化(也被称为 brace initialization):
32
+ ```
33
+ ArrayList<String> list = new ArrayList<String>() {{
34
+ add("A");
35
+ add("B");
36
+ add("C");
37
+ }};
38
+ ```
39
+ 但是,我不喜欢这个方式。只是为了做个初始化,却要在` ArrayList ` 的同一行后面加这么一坨代码。
40
+
41
+ ####Arrays.asList
42
+ ```
43
+ List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
44
+ ```
45
+ ####Collections.singletonList
46
+ ```
47
+ List<String> places = Collections.singletonList("Buenos Aires");
48
+ ```
49
+ 注意:后面的这两种方式,得到的是一个定长的` List ` (如果add操作会抛异常)。如果你需要一个不定长的` List ` ,可以这样做:
50
+ ```
51
+ ArrayList<String> places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
52
+
53
+ ```
54
+
55
+ stackoverflow链接:
56
+ http://stackoverflow.com/questions/1005073/initialization-of-an-arraylist-in-one-line
You can’t perform that action at this time.
0 commit comments