-3

哪个更好,为什么?

一个)List<String> list = new ArrayList<>();

b)ArrayList<String> list = new ArrayList<>();

4

2 回答 2

2

这取决于上下文。

如果您只关心列表语义而不关心特定实现,请选择List<String>. 如果您想强制执行特定的实现,请选择ArrayList<String>LinkedList<String>或其他任何东西。

在大多数情况下,您将希望继续使用接口而不是特定的实现。

于 2017-09-14T06:20:40.740 回答
0

(a) 更好,因为它更灵活。例如,如果突然您的需求发生变化并说“我们不会创建一个新的空数组列表来分配给变量list,而是使用从另一个列表过滤的项目填充list”,您需要为此更改代码。你可以把它改成这样:

List<String> list = anotherList.stream().filter(x -> x.length() > 2).collect(Collectors.toList());

由于collect(Collectors.toList())返回 a ,如果您使用 (b) 中的代码List,您还需要更改类型。list

另一种情况是,后来你发现你需要分配一些其他类型的列表,LinkedList例如list. 如果您使用 (a) 中的代码,您可以直接分配链表。如果您使用 (b) 中的代码,则必须返回声明list并更改类型。

一般模式是,当您使用更多“抽象”类型时,您的代码会变得更加灵活,但同时您可以对变量做更少的事情。例如,您不能使用仅在变量中声明的方法ArrayListlist但另一方面,可以将其他类型的列表分配给list. 如果你是一个更抽象的类型,Collection那么你不能再使用只声明的成员,但是可以分配List各种集合 -Set等等。Map

于 2017-09-14T06:21:11.440 回答