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,这会导致编译器警告)。
我在接受采访时被问到:
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,这会导致编译器警告)。