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接口的所有方法。