【问题标题】:Difference between generic implementation of ArrayList with older implementation which doesn't have genericArrayList 的通用实现与没有通用的旧实现之间的区别
【发布时间】:2021-09-19 21:41:12
【问题描述】:

我在接受采访时被问到:

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

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

【问题讨论】:

标签: java generics arraylist


【解决方案1】:

有点奇怪的问题;大概他们在问,基本上,ArrayList.java 的源文件在 java 1.4 中与它在 java 1.5 中的样子之间的“差异”。

唯一的区别是所有出现<>的地方,它们在1.4版本中根本没有,并且选择的几个地方的类型已经从Object中改变了1.4 到 1.5 中的 E,但没有你想象的那么多(例如,后备数组仍然是 Object[],而不是 E[],故意)。 get(int) 以前是public Object get(int index),现在是public E get(int index),加上以前是public void add(Object item),现在是public void add(E item)

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

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

如果有人立即说出所有的变化,我也会很感兴趣,尽管不那么有趣(我猜那是“正确的答案”)。

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

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2014-08-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多