11

Java SE 6.0 API 说values()方法 injava.util.HashMap返回一个Collection类型。JVM 如何决定在运行时返回哪个集合。它是特定于 jvm 的还是 Java 遵循的任何一般准则。我浏览了源代码,HashMap但没有得到任何线索。非常感谢任何帮助,或者如果问题很蹩脚,请指出原因。谢谢。

4

2 回答 2

11

您可以在来源中看到:

public Collection<V> values() {
    if (values == null) {
        values = new AbstractCollection<V>() {
          ...

他们实际上给出了AbstractCollection.

关于这个集合需要了解的重要一点是它是不可序列化的:永远不要尝试在客户端-服务器之间按原样发送它。

请注意,此摘录来自 Sun JDK 源。这意味着它特定于供应商实施

于 2013-06-18T14:39:29.723 回答
3

不是 JVM 决定在运行时返回哪个集合,而是 Map 接口的实际实现。如果是 HashMap,这是 HashMap.Values 内部类,请参阅 HashMap src

于 2013-06-18T14:46:16.423 回答