【问题标题】:What are the pros and cons of LinkedHashMaps vs. LinkedHashSets?LinkedHashMap 与 LinkedHashSet 的优缺点是什么?
【发布时间】:2009-06-10 21:30:48
【问题描述】:

有人能解释一下选择其中一个的主要好处以及该选择带来的坏处吗?

【问题讨论】:

  • 我很困惑,问了一个愚蠢的问题,不过感谢您的快速回答。

标签: java linkedhashmap linkedhashset


【解决方案1】:

它们解决不同的问题,LinkedHashMap 将键映射到值,LinkedHashSet 只是存储没有重复的事物的集合。

链接哈希映射用于映射键/值对——例如,存储姓名和年龄:

Map<String,Integer> namesAndAges = new LinkedHashMap<String,Integer>();
namesAndAges.put("Benson", 25);
namesAndAges.put("Fred", 19);

另一方面,链接哈希集用于存储一个事物的集合——名称,例如:

Set<String> names = new LinkedHashSet<String>();
names.add("Benson");
names.add("Fred");

【讨论】:

  • 我只是在查看 ArrayList 的源代码,以确保我必须使用 Set(具有良好的搜索性能)而不是 ArrayList(必须遍历所有记录才能找到东西)
  • LinkedHashMap 优于 HashMap 的目的是 LinkedHashMap 在内部也使用 LinkedList 来存储键/值对的添加顺序。因此迭代 LinkedHashMap 将导致键/值对按照它们添加的顺序进行,而经典的 HashMap 将根据每个键的哈希码的顺序进行迭代。
  • 没错,但由于问题是将 LinkedHashMaps 与 LinkedHashSets 进行比较,我决定关注差异,而不是共同点。 :-)
  • Benson 我很好,这就是我只添加评论的原因。我只是认为作者对 Java 没有那么丰富的经验,并想添加更多信息:)
【解决方案2】:

LinkedHashSet 内部包含一个双向链表,贯穿其定义元素顺序的所有条目。 此类允许空元素。

这个类的实现是不同步的,所以必须对外同步。 LinkedHashMap 也不同步,必须对外同步

例如:

Map map = Collections.synchronizedMap(new LinkedHashMap());

LinkedHashSet 存储每个元素的单个值,而 LinkedHashMap 存储键/值对。
在下图中,您可以看到 java.util.Collections。实心框显示具体的类实现
alt text http://www.softfinity.com/diag1.png

【讨论】:

    【解决方案3】:

    Set 只有值,不能重复。 Ma​​p 有一个键/值对。它们有不同的用途。

    一个集合将被用作一个集合,传递一组对象,而当您有一个唯一的键来标识每个元素并且您希望能够通过该键访问它时,映射很有用。

    【讨论】:

      【解决方案4】:

      一个是集合,一个是地图。为给定场景选择正确的数据结构。

      【讨论】:

        【解决方案5】:

        LinkedHashMapLinkedHashSet 只有一个区别,那就是 HashMapHashSet 区别,它们的父母。同样,HashSet 只是HashMap 的变体。您可以将HashSet 说成HashMap,所有值都指向一个最终对象。因此,它们都不会给您带来太大的差异。

        使用LinkedHashSet,您将只使用一个最终对象,而不是您的密钥。 使用LinkedHashMap,如果您将所有键的值设置为空,那么它也比 LinkedHashSet 更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-26
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 2010-10-31
          • 1970-01-01
          • 2011-07-24
          • 2011-06-03
          相关资源
          最近更新 更多