Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 05aceb8

Browse files
committed
优化"如何用一行代码初始化一个ArrayList"
1 parent 3e59fa6 commit 05aceb8

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ stackoverflow-Java-top-qa
4040
4141
* [去掉烦人的"!=null"(判空语句](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/avoiding-null-statements-in-java.md)
4242
* [获取完整的堆栈信息](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/get-current-stack-trace-in-java.md)
43-
* [如何通过一行代码初始化ArrayList](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/initialization-of-an-arraylist-in-one-line.md)
43+
* [如何用一行代码初始化一个ArrayList](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/initialization-of-an-arraylist-in-one-line.md)
4444

4545
> 网络
4646
Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,57 @@
1-
如何用一句代码初始化一个ArrayList
2-
##问题描述
1+
如何用一行代码初始化一个ArrayList
32

4-
我想创建一个用于测试的的选项列表,首先:
5-
```
3+
###问题
4+
为了测试,我需要临时快速创建一个list。一开始我这样做:
5+
```java
66
ArrayList<String> places = new ArrayList<String>();
77
places.add("Buenos Aires");
88
places.add("Córdoba");
99
places.add("La Plata");
1010
```
11-
之后我如下重构了代码:
12-
```
11+
之后我重构了下
12+
```java
1313
ArrayList<String> places = new ArrayList<String>(
1414
Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
1515
```
16-
是否还有更好的方法来完成这个功能呢?
16+
是否有更加简便的方法呢?
1717

18-
###回答一(750赞)
19-
实际上,可能初始化ArrayList的"最好"的方法就如你所写的一样,无论如何,都不需要创建一个新的list。
18+
###回答
19+
20+
####常见方式
21+
实际上,也许"最好"的方式,就是你写的这个方式,因为它不用再创建新的`List`:
2022
```
2123
ArrayList<String> list = new ArrayList<String>();
2224
list.add("A");
2325
list.add("B");
2426
list.add("C");
2527
```
26-
但问题是,有相当多多的类型需要参考`list`实例。
27-
可以有替代的办法,比如使用匿名内部类,初始化实例,也被称为一个"double brace initailzation"。
28+
只是这个方式看上去要多写些代码,让人郁闷
29+
30+
####匿名内部类
31+
当然,还有其他方式,例如,写一个匿名内部类,然后在其中做初始化(也被称为 brace initialization):
2832
```
2933
ArrayList<String> list = new ArrayList<String>() {{
3034
add("A");
3135
add("B");
3236
add("C");
3337
}};
3438
```
35-
然而,我不是太喜欢这种方法,因为这样得到是一个初始化一个实例的ArrayList的子类,并且这个类只是被用来创建一个对象,好像我有点过分了。
36-
如果 `the Collection Literals proposal for Project Coin (抱歉,不知怎么翻译)`被接受的话,可能是最好的方式(将被引入Java7,但它不太可能成为Java 8的一部分)。
37-
[更多关于the Collection Literals proposal的内容链接](http://stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization)
38-
```
39-
List<String> list = ["A","B","C"];
40-
```
41-
不行的是,并没有帮到你。这会初始化成一个不可变的列表,而不是一个ArrayList,而且,现在还不能用。
39+
但是,我不喜欢这个方式。只是为了做个初始化,却要在`ArrayList`的同一行后面加这么一坨代码。
4240

43-
###回答二(714赞)
44-
如果你只是作为一个List声明的话,这样可能会更简单.(必须是ArrayList吗)
41+
####Arrays.asList
4542
```
4643
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
4744
```
48-
或者只有一个元素:
45+
####Collections.singletonList
4946
```
5047
List<String> places = Collections.singletonList("Buenos Aires");
5148
```
52-
这意味着places是不可变的(如果改变它,将会抛出一个异常).
53-
让一个可变列表是一个具体的ArrayList,您可以从不可变列表创建一个ArrayList:
49+
注意:后面的这两种方式,得到的是一个定长的`List`(如果add操作会抛异常)。如果你需要一个不定长的`List`,可以这样做:
5450
```
5551
ArrayList<String> places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
52+
5653
```
57-
[原文链接:Initialization of an ArrayList in one line](http://stackoverflow.com/questions/1005073/initialization-of-an-arraylist-in-one-line)
54+
55+
stackoverflow链接:
56+
http://stackoverflow.com/questions/1005073/initialization-of-an-arraylist-in-one-line
5857

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /