有人可以解释选择一个而不是另一个的主要好处以及该选择带来的坏处吗?
5 回答
它们解决不同的问题,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");
LinkedHashSet 内部包含一个双向链表,该列表贯穿其定义元素顺序的所有条目。此类允许空元素。
这个类的实现是不同步的,所以必须对外同步。 LinkedHashMap 也不同步,必须对外同步
例如:
Map map = Collections.synchronizedMap(new LinkedHashMap());
除此之外,LinkedHashSet 存储每个元素的单个值,而 LinkedHashMap 存储键/值对。
在下图中,您可以看到 java.util.Collections。实心框显示具体的类实现
替代文本 http://www.softfinity.com/diag1.png
一个 Set 只有值,你不能把重复的东西放进去。一个 Map 有一个键/值对。它们有不同的用途。
一个集合将被用作一个集合,传递一组对象,而当您有一个唯一的键来标识每个元素并且您希望能够通过该键访问它时,映射很有用。
一个是集合,一个是地图。为给定场景选择正确的数据结构。
LinkedHashMap
并且LinkedHashSet
只有一个区别,那就是区别HashMap
,HashSet
他们的父母。同样,HashSet
只是 的变体HashMap
。您可以说HashSet
,HashMap
所有值都指向一个最终对象。因此,它们都不会给您带来太大的差异。
使用LinkedHashSet
,您将只使用一个最终对象,而不是您的键。使用LinkedHashMap
,如果您将所有键的值设置为 null ,那么它也比 LinkedHashSet 更好地用于 Set 目的。