【问题标题】:Java: What data structure to use to imitate PHP's associative arrays?Java:使用什么数据结构来模仿 PHP 的关联数组?
【发布时间】:2010-12-04 20:38:31
【问题描述】:

我想要一个允许我将键映射到值的数据结构,例如 PHP 的关联数组。每个键只能存在一次,但一个值可以映射到任意数量的键。我在找什么? Google Commons Collections 中的内容?

【问题讨论】:

标签: java php associative-array data-structures


【解决方案1】:

您正在寻找HashMap,例如HashMap<K,V>。前者将对象映射到对象,后者映射您选择的类型(与其他泛型一样)。

【讨论】:

  • PHP 数组维护插入顺序。 HashMap 没有。
  • 好点,但他只要求关联属性,所以我认为他并不关心这个怪癖。
  • @cletus:然后是LinkedHashMap。 :-P
  • 如果你想对键进行排序,你可以使用 TreeMap
【解决方案2】:

Map 结构是您想要的。一个好的实现是HashMap

此数据类型不允许 Key 具有相同的值,但您可以拥有任意数量的重复值。

示例用法:

Map<String, String> map = new HashMap<String, String>();
map.put("FirstName", "LastName");

System.out.println(map.get("FirstName")); // Prints 'LastName'
System.out.println(map.put("FirstName", "Foo")); // Prints 'LastName'
System.out.println(map.get("FirstName")); // Prints 'Foo'

换句话说,密钥只能存在一次。否则该值将被覆盖。

【讨论】:

  • 我认为他希望多个键指向同一个对象,尽管我可能错了
  • 不,Map&lt;K,V&gt; 是他想要的。一个键只能存在一次,但一个值可以映射到任意数量的键。所以在( "Foo" =&gt; foo, "Bar" =&gt; bar, "Baz" = foo) 的情况下,键“Foo”和“Baz”是唯一的,但它们映射到相同的值,foo。
  • Aaa - 这不是一回事吗?多个键 - 相同的值,如果您多次粘贴相同的引用,这就是您使用 HashMap 获得的结果。
  • 在 PHP 关联数组中,关联可以是异构的。例如:PHP 支持:array(key1 => string1, key2 => array(..), key3 => Object) 不确定将 hashmap 声明为 new HashMap 是否会复制此行为。
【解决方案3】:

常规的 HashMap 有什么问题?如果您的值是字符串,您将免费获得引用计数,如果您需要引用对象的特定实例,请不要分配一个,而是使用现有引用

【讨论】:

  • 引用计数?您能否进一步解释这一点或它对托管语言的影响?
  • -1:关于引用计数的句子完全不正确。没有像样的 JVM 会使用引用计数来管理字符串或任何其他“正常”数据结构的内存。
  • String a = "A"; String b = "A"; if (a == b &amp;&amp; a.equals(b)) System.out.println(1); else System.out.println(0); 1 所以 - 我想编译器部署的实际机制不是暴力 RC,但这不是我所暗示的,我想说的是,在 HashMap 中,您的多个 String 键将映射到String 值的相同实例,您不必对此做任何特殊处理,因为在 Java 中,字符串以特殊方式处理
【解决方案4】:

HashMap 肯定是要走的路。实际上,当我第一次开始使用 PHP 编码时,我的看法是相反的。我想知道,如何实现 HashMap?然后我发现了关联数组。

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多