LinkedHashMap和LinkedHashSet相比有哪些优缺点?

7

能否有人解释一下选择其中一种的主要好处和随之而来的缺点?


我感到困惑并问了一个愚蠢的问题,尽管如此,还是谢谢你们的快速回答。 - Bobby
5个回答

22

它们解决不同的问题,LinkedHashMap用于将键映射到值,而LinkedHashSet仅存储无重复项的集合。

LinkedHashMap用于映射键/值对,例如存储姓名和年龄:

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");

1
我只是查看了ArrayList的源代码,以确保我需要使用Set(具有良好的搜索性能),而不是ArrayList(必须遍历所有记录才能找到某些内容)。 - Ravi Wallau
6
LinkedHashMap 相比于 HashMap 的优势在于,它在内部还使用了 LinkedList 来存储键值对的添加顺序。因此,遍历 LinkedHashMap 将按照它们被添加的顺序返回键值对,而经典的 HashMap 则会根据每个键的哈希码来迭代返回。 - Vincent Robert
1
没错,但由于问题是在比较LinkedHashMaps和LinkedHashSets,所以我决定关注它们的差异而不是共同点。 :-) - Benson
1
没问题,那就让它这样吧 Benson,所以我只是加了一个注释。我觉得作者对Java不是很熟悉,想再添加一些信息 :) - Vincent Robert

6

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

此类实现未同步,因此必须在外部进行同步。LinkedHashMap也未同步,必须在外部进行同步。

例如:

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

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

3

集合只有值,不能重复。映射有键/值对。它们有不同的用途。

集合将被用作一个集合,传入一组对象,而映射在你有一个唯一的键来标识每个元素并且你想通过该键访问它时非常有用。


2

一个是集合,一个是映射。根据给定的场景选择正确的数据结构。


2

LinkedHashMapLinkedHashSet 只有一个区别,那就是它们的父类不同,HashMapHashSet 的区别。再次强调,HashSet 只是 HashMap 的变体。你可以把 HashSet 看作是所有值都指向单个最终对象的 HashMap。因此,两者之间并没有太大的区别。

使用 LinkedHashSet,除了键之外,您只需使用一个最终对象。 如果将所有键的值设置为 null,则使用 LinkedHashMap 比使用 LinkedHashSet 更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接