ArrayList
是一个实现了 List
接口的类,而 List
和 Collection
都是Java集合框架中的接口。
这三个声明之间有一些重要的区别:
-
ArrayList list = new ArrayList();
这是一个原始类型的声明,意味着没有使用泛型。
这样的声明允许你在
list
中添加任何类型的对象,这可能会导致运行时错误(例如,当你尝试从列表中检索特定类型的对象时)。在现代Java编程中,通常不推荐使用原始类型的集合,因为它们不提供类型安全。
-
Collection list = new ArrayList();
这里,你声明了一个
Collection
类型的变量list
并将其初始化为一个ArrayList
的实例。尽管这是合法的,但通常不推荐这样做,
因为
Collection
接口提供的操作比List
接口少。当你使用Collection
类型时,你失去了List
提供的特定方法,如get(int index)
或add(int index, E element)
。 -
List list = new ArrayList();
这是一个使用原始类型的
List
接口的声明。尽管它允许你添加任何类型的对象,但与第一个声明相比,它提供了更多的类型安全,
因为你可以将
list
转换为具体的List
类型(例如List<String>
)。然而,为了获得最大的类型安全性,你应该使用泛型:
List<String> list = new ArrayList<>();
在这个声明中,
list
是一个只能包含String
类型对象的List
。
总结:
- 使用原始类型的集合(如
ArrayList list = new ArrayList();
)是不推荐的,因为它们不提供类型安全。 - 使用
Collection
类型(如Collection list = new ArrayList();
)可能会限制你访问List
接口提供的特定方法。 - 使用泛型的
List
接口(如List<String> list = new ArrayList<>();
)是最佳做法,因为它提供了类型安全并允许你访问List
接口的所有方法。