ArrayList 的通用实现与没有通用的旧实现之间的区别

Difference between generic implementation of ArrayList with older implementation which doesn't have generic

我在接受采访时被问到:

What is the difference between the generic implementation of ArrayList and the older implementation which does not utilize generics?

我知道它们在使用方式、优点和限制方面的区别,但我找不到实现上的区别。

有点奇怪的问题;大概他们在本质上是在询问 ArrayList.java 的源文件之间的 'diff',因为它在 java 1.4 中与它在 java 1.5.[=24 中的样子=]

唯一不同的是<>出现的各种地方,在1.4版本中根本没有,类型在[=45中=] 很少有地方从 1.4 的 Object 到 1.5 的 E,但没有你想象的那么多(例如,支持数组仍然是 Object[],而不是 E[], 故意)。 get(int) 曾经读作 public Object get(int index) 但现在读作 public E get(int index),并且 add 曾经读作 public void add(Object item) 但现在读作 public void add(E item).

这似乎很深奥,也不是特别相关,但通常面试官并不一定会问问题,因为他们正在寻找一个具体的答案;通常他们问问题只是为了看看它去了哪里。

例如,如果我正在采访某人,这让他们感到困惑,他们变得非常慌乱,这是重要的信息(你很容易感到慌张并且不确定自己的技能水平)。

如果有人立即说出所有的变化,我也会很感兴趣,尽管不是这样(我猜是 'the right answer')。

如果受访者谈到泛型的切线,或者它在其他语言中的实现,或者向后兼容的概念,那也会很有趣。

我倾向于喜欢技术性的答案。我能想到的最令人印象深刻的答案是,是否有人会深入探讨为什么 ArrayList 仍然使用 Object[] 而不是 E[],即使我特别要求 [=42] =](因为那部分没有什么不同,但因为它是那样工作的,例如 get() 方法中有丑陋的转换:转换为类型 var,这会导致编译器警告)。