美文网首页
简单实现hashSet -- 应用篇

简单实现hashSet -- 应用篇

作者: 王海东_011c | 来源:发表于2019-08-07 16:26 被阅读0次

简单实现hashSet -- 应用篇

写这篇文章的起因:

  • 在使用golang和php的时候我们经常会判断一个变量是否在map或者数组中;
  • 在php中的时候我们经常使用in_array()来判断,这里是我们经常用的。
    其实用in_array()这个函数就是对数组进行遍历判断是否存在时间复杂度是log(n)
    一般数组不是太大也就这样了;
  • 但是在golang中并没有封装这个函数,这个需要我们自己去封装。
    如果也是用循环的方式去判断变量是否存在,那是不是感觉很low,也就是这个原因引出了这篇文章
  1. 在php和golang中都适用,主要原理是判断key是否存在
    // 在golang中可以这样

    type HashSet struct {
        set map[interface{}}]bool
    }
    
    func NewHashSet() *HashSet {
        return &HashSet{make(map[interface{}]bool)}
    }
    
    func (set *HashSet) Add(k interface{}) bool {
        _, ok := set.set[k]
        set.set[i] = true
        return !ok //False if it existed already
    }
    
    func (set *HashSet) Get(k interface{}) bool {
        _, found := set.set[k]
        return found //true if it existed already
    }
    
    func (set *HashSet) Remove(k interface{}) {
        delete(set.set, k)
    }


    // InArray 函数就简单的模拟了in_array 函数
    // 需要注意的是,在设置 $HashSet 的时候需要设置在key 中,
    // 例 : 
    
    $HashSet = [
        "a" => true,
        "b" => true,
    ];

    function InArray(&$HashSet,$key) {
        return isset($HashSet[$key]);
    }
   
    var_dump(InArray($HashSet,"b"))

    // 当然这里也可以不用InArray 封装,直接用 isset,这里只是为了举例子

    // 如果是正常数组
    
    $HashSet2 = [
        "a" ,"b"
    ];

    // 可以使用 array_flip() 函数(交换数组中的键和值。)
    // 再使用isset进行判断


总结

  1. 就是数的key与value调换,利用map和数组中的key的唯一性来判断
  2. 判断key是否存在的时间复杂度是 O(1);

GitHub地址

参考文献

[1] Go 语言简单实现HashSet

相关文章

  • 简单实现hashSet -- 应用篇

    简单实现hashSet -- 应用篇 写这篇文章的起因:在使用golang和php的时候我们经常会判断一个变量是否...

  • 深入理解-HashSet源码解读

    HashSet HashSet的源码很简单,继承自AbstractSet,实现了Set, Cloneable...

  • 10.HashSet

    HashSet的源码如此简单。下面还是对HashSet的源码作一个总结吧: HashSet基于HashMap实现,...

  • java8中hashset源码分析

    分析大纲 hashset实现原理 hashset代码分析 1. hashset实现原理 hashset存储无序,不...

  • Java8之HashSet理解

    简介 HashSet实现了Set接口,它不允许集合中有重复的值。HashSet是对HashMap的简单包装,对Ha...

  • Java集合之HashSet源码分析

    阅读目录 一、HashSet简介 二、HashSet源码分析 三、HashSet的应用示例代码

  • Set解析

    概览 上图为HashSet,LinkedSet,TreeSet对比 HashSet 可见HashSet其实就是实现...

  • HashSet

    HashSet 是一个不允许存储重复元素的集合,它的实现比较简单,只要理解了 HashMap,HashSet 就水...

  • Java Set简介

    Set的主要实现有HashSet、LinkedHashSet和TreeSet,本文尝试简单探究一下它们的实现.本文...

  • java集合(二)——集合 Set

    一、HashSet类HashSet简介 HashSet是Set接口的典型实现,实现了Set接口中的所有方法,并没有...

网友评论

      本文标题:简单实现hashSet -- 应用篇

      本文链接:https://www.haomeiwen.com/subject/mjqadctx.html