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
)。
然而,为了获得最大的类型安全性,你应该使用泛型:List
在这个声明中,list
是一个只能包含 String
类型对象的 List
。
总结:
ArrayList list = new ArrayList();
)是不推荐的,因为它们不提供类型安全。Collection
类型(如 Collection list = new ArrayList();
)可能会限制你访问 List
接口提供的特定方法。List
接口(如 List list = new ArrayList<>();
)是最佳做法,因为它提供了类型安全并允许你访问 List
接口的所有方法。