哪一个更好,为什么?
a)List<String> list = new ArrayList<>();
b)ArrayList<String> list = new ArrayList<>();
答案 0 :(得分:2)
这取决于具体情况。
如果您只关心列表语义而不关心特定实现,请转到List<String>
。如果您要强制执行特定实施,请转到ArrayList<String>
,LinkedList<String>
或其他任何内容。
在大多数情况下,您需要继续使用界面而不是特定的实现。
答案 1 :(得分:0)
(a)更好,因为它更灵活。例如,如果突然您的需求发生变化并说“&#34”,我们将使用从其他列表中筛选的项目填充list
而不是创建新的空数组列表以分配给变量list
。 ;,您需要为此更改代码。您可以将其更改为以下内容:
List<String> list = anotherList.stream().filter(x -> x.length() > 2).collect(Collectors.toList());
由于collect(Collectors.toList())
返回List
,如果您使用(b)中的代码,还需要更改list
的类型。
另一种情况是,您后来发现需要指定其他类型的列表,例如LinkedList
到list
。如果您使用(a)中的代码,则可以直接分配链接列表。如果您使用(b)中的代码,则必须返回list
的声明并更改类型。
一般模式是,当你使用更多&#34; abstract&#34;类型,您的代码变得更加灵活,但同时您可以减少变量。例如,您不能在ArrayList
变量上使用仅在list
中声明的方法,但另一方面,可以将其他类型的列表分配给list
。如果你是一个更抽象的类型Collection
,那么你就不能再使用仅在List
中声明的成员,而是使用各种集合 - Set
,{{1等等 - 可以分配。