【问题标题】:How Hashset avoids duplicatesHashset 如何避免重复
【发布时间】:2015-09-12 01:22:54
【问题描述】:

HashSet 内部调用 HashMap 以避免实现中的重复

  public HashSet() {
    map = new HashMap<E,Object>();
    }

public boolean add(E e) { 
return map.put(e, PRESENT)==null;
}

举例

代码:

Set hashSet = new HashSet();
hashSet.add("Abraham");
hashSet.add("Billy");       
hashSet.add("Billy");       
System.out.println("HashSet Value " +hashSet.toString());

输出:

HashSet Value [Billy, Abraham]

【问题讨论】:

  • put方法呢?
  • 您的意思是使用 Map public boolean add(E e) { return map.put(e, PRESENT)==null; 避免重复的所有集合实现}

标签: java hashmap hashset


【解决方案1】:

Map接口中,每个键也是唯一的(java docs):

将键映射到值的对象。 地图不能包含重复项 键;每个键最多可以映射到一个值。

这意味着,HashMap 已经在避免重复键,这是HashSet 的元素

【讨论】:

  • 如果我们在hashmap中限制重复,是否相当于HashSet?
  • @Martin 我没有按照您的要求进行操作。 Map 比 Set “更强大”,因为它还将每个键映射到一个值,但我们可以使用 Map 而不是 Set——它的可读性会降低,但仍然可以工作。
  • 我想了解 HashSet 的用途
  • @Martin 使用HashSet 比使用带有虚拟值的HashMap 更具可读性,它实现了Set 接口。
  • 请否决者详细说明答案有什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2020-10-20
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多