LinkedHashMaps与LinkedHashSets的优缺点是什么?

sol*_*oth 7 java linkedhashmap linkedhashset

有人可以解释一个选择另一个的主要好处以及该选择带来的不利因素吗?

Ben*_*son 22

它们解决了不同的问题,LinkedHashMap将键映射到值,LinkedHashSet只存储没有重复的东西的集合.

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

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

另一方面,链接的哈希集用于存储一个东西的集合 - 名称,例如:

Set<String> names = new LinkedHashSet<String>();
names.add("Benson");
names.add("Fred");
Run Code Online (Sandbox Code Playgroud)

  • LinkedHashMap优于HashMap的目的是LinkedHashMap还在内部使用LinkedList来存储已添加键/值对的顺序.因此迭代LinkedHashMap将导致按照添加顺序的键/值对,而经典HashMap将根据每个键的哈希码的顺序进行迭代. (6认同)

Rom*_*gan 6

LinkedHashSet内部包含一个双向链表,该列表运行所有定义元素顺序的条目.此类允许null元素.

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

例如:

Map map = Collections.synchronizedMap(new LinkedHashMap());
Run Code Online (Sandbox Code Playgroud)

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