ArrayList 的泛型实现与没有泛型的旧实现之间的区别



我在一次采访中被问到:

ArrayList的泛型实现与不使用泛型的旧实现之间有什么区别?

我知道它们在使用方式、优势和限制方面的差异,但我找不到实现的差异。

有点奇怪的问题;据推测,他们本质上是在询问ArrayList.java的源文件在java 1.4中与在java 1.5中的"差异"。

唯一的区别是,<>出现的所有不同位置,它们根本不在1.4版本中,选择的几个位置中的类型已经从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)

这似乎很深奥,也不是特别相关,但通常面试官不一定要问问题,因为他们在寻找具体的答案;他们经常问问题,只是想看看结果如何。

例如,如果我在面试某人,这让他们感到困惑,他们会非常慌乱,这是重要的信息(你很容易感到慌乱,不确定自己的技能水平(。

如果有人立即说出所有的变化,我也会很感兴趣,尽管不是这样(我想这是"正确的答案"(。

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

我喜欢技术性的答案。我能想到的最令人印象深刻的答案是,如果有人深入研究为什么ArrayList仍然使用Object[]而不是E[]作为支持数组,尽管我特别询问了"差异"(因为这部分没有什么不同,但因为它是这样工作的,例如,get()方法中有丑陋的类型转换:转换为类型var,这会引起编译器警告(。

最新更新