列表与ArrayList

时间:2017-09-14 06:10:57

标签: java inheritance run-time-polymorphism

哪一个更好,为什么?

a)List<String> list = new ArrayList<>();

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

2 个答案:

答案 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的类型。

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

一般模式是,当你使用更多&#34; abstract&#34;类型,您的代码变得更加灵活,但同时您可以减少变量。例如,您不能在ArrayList变量上使用仅在list中声明的方法,但另一方面,可以将其他类型的列表分配给list。如果你是一个更抽象的类型Collection,那么你就不能再使用仅在List中声明的成员,而是使用各种集合 - Set,{{1等等 - 可以分配。