文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

HashSet工作原理_动力节点Java学院整理

2023-05-31 15:51

关注

对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:

public class HashSet<E>  extends AbstractSet<E>  implements Set<E>, Cloneable, java.io.Serializable  {  // 使用 HashMap 的 key 保存 HashSet 中所有元素 private transient HashMap<E,Object> map;  // 定义一个虚拟的 Object 对象作为 HashMap 的 value  private static final Object PRESENT = new Object();  ...  // 初始化 HashSet,底层会初始化一个 HashMap  public HashSet()  {  map = new HashMap<E,Object>();  }  // 以指定的 initialCapacity、loadFactor 创建 HashSet  // 其实就是以相应的参数创建 HashMap  public HashSet(int initialCapacity, float loadFactor)  {  map = new HashMap<E,Object>(initialCapacity, loadFactor);  }  public HashSet(int initialCapacity)  {  map = new HashMap<E,Object>(initialCapacity);  }  HashSet(int initialCapacity, float loadFactor, boolean dummy)  {  map = new LinkedHashMap<E,Object>(initialCapacity  , loadFactor);  }  // 调用 map 的 keySet 来返回所有的 key  public Iterator<E> iterator()  {  return map.keySet().iterator();  }  // 调用 HashMap 的 size() 方法返回 Entry 的数量,就得到该 Set 里元素的个数 public int size()  {  return map.size();  }  // 调用 HashMap 的 isEmpty() 判断该 HashSet 是否为空, // 当 HashMap 为空时,对应的 HashSet 也为空 public boolean isEmpty()  {  return map.isEmpty();  }  // 调用 HashMap 的 containsKey 判断是否包含指定 key  //HashSet 的所有元素就是通过 HashMap 的 key 来保存的 public boolean contains(Object o)  {  return map.containsKey(o);  }  // 将指定元素放入 HashSet 中,也就是将该元素作为 key 放入 HashMap  public boolean add(E e)  {  return map.put(e, PRESENT) == null;  }  // 调用 HashMap 的 remove 方法删除指定 Entry,也就删除了 HashSet 中对应的元素 public boolean remove(Object o)  {  return map.remove(o)==PRESENT;  }  // 调用 Map 的 clear 方法清空所有 Entry,也就清空了 HashSet 中所有元素 public void clear()  {  map.clear();  }  ...  }

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯