前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手写代码:HashSet

手写代码:HashSet

作者头像
ha_lydms
发布2023-08-09 21:04:28
1250
发布2023-08-09 21:04:28
举报
文章被收录于专栏:学习内容学习内容

一、简介

1、特点

Set容器特点:无序、不可重复。 无序指Set中的元素没有索引,我们只能遍历查找; 不可重复指不允许加入重复的元素。

2、底层实现:

HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的(HashMap),因此,查询效率和增删效率都比较高;

在这里插入图片描述
在这里插入图片描述

查看底层代码,我们发现里面有个map属性,这就是HashSet的核心秘密。我们再看add()方法,发现增加一个元素说白了就是在map中增加一个键值对,键对象就是这个元素,值对象是名为PRESENT的Object对象。说白了,就是“往set中加入元素,本质就是把这个元素作为key加入到了内部的map中”。

由于map中key都是不可重复的,因此,Set天然具有“不可重复”的特性。

二、代码

手写的代码:

代码语言:javascript
复制
public class MyHashSet {
    HashMap map;
    private static final Object PRESENT = new Object();

    public MyHashSet() {
        map = new HashMap<>();
    }

    public int size() {
        return map.size();
    }

    public void add(Object o) {
        map.put(o, PRESENT);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (Object key : map.keySet()) {
            sb.append(key + ",");
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }

调用测试:

代码语言:javascript
复制
public static void main(String[] args) {
    MyHashSet set = new MyHashSet();
    set.add("10");
    set.add("30");
    set.add("20");
    System.out.println(set.size());
    System.out.println(set.toString());
}

结果为 :

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
    • 1、特点
      • 2、底层实现:
      • 二、代码
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档