Java - ArrayList和ArrayList <Object>有两个不同的类吗?

Tim*_*Tim 4 java generics arraylist

如果是这样,两者有什么区别?在Java库中实际上有两个单独的类定义吗?一个用于旧的ArrayList,另一个用于新的通用的?这纯粹是好奇心的问题.

Thi*_*ilo 6

只有一个类ArrayList,但它支持泛型,这意味着您可以使用类型对其进行批注.但是,这是可选的(主要是为了向后兼容),因此您也可以继续使用原始类型(但不鼓励使用).

请注意,Java泛型只发生在编译器上,在运行时,ArrayList实例本身不知道您为其分配了什么泛型类型.这意味着如果您对其进行注释,它在内部的工作方式完全相同.

与数组不同,通用集合没有新的单独类.因此,虽然实际上有一个不同于Integer[]for String[](或for for Integer[][])的类,但是for的类ArrayList<String>与for ArrayList<Integer>(ArrayList<?>ArrayListand ArrayList<List<Integer>>)相同.

而且与数组不同,集合使用的泛型没有什么特别之处(尽管这仍然是他们最受欢迎的应用程序).相同的机制可以用于完全不同的东西,例如Callable.