leetcode 705 设计哈希映射

Posted caijiwdq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 705 设计哈希映射相关的知识,希望对你有一定的参考价值。

一  题目概述

不使用任何内建的哈希表库设计一个哈希集合

具体地说,你的设计应该包含以下的功能

  • add(value):向哈希集合中插入一个值。
  • contains(value) :返回哈希集合中是否存在这个值。
  • remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

二 java算法实现

class MyHashSet {
    private Node[]arr=new Node[1024];    //2的指数,计算hash时可以用 &
    private class Node{
        public Node next;
        public int val;
    }

    /** Initialize your data structure here. */
    public MyHashSet() {
    
    }
    
    public void add(int key) {       //尾插法
        Node node=new Node();
        int hash=key&1023;
        node.val=key;
        if(contains(key))
            return;
        if(arr[hash]==null){
            arr[hash]=node;
        }else{
            Node n=arr[hash];
            while(n.next!=null){
                n=n.next;
            }
            n.next=node;
        }
    }
    
    public void remove(int key) {
        int hash=key&1023;
        if(!contains(key))
            return ;
        else{
             Node n=arr[hash];
             Node n1=n.next;
             if(n.val==key){
                 arr[hash]=n.next;
                 return ;
             } else{
                 while(n1!=null){
                     if(n1.val==key){
                         n.next=n1.next;
                         return ;
                     }
                     n=n.next;
                     n1=n1.next;
                }
             }
         }   
        
    }
    
    /** Returns true if this set contains the specified element */
    public boolean contains(int key) {
        int hash=key&1023;
        if(arr[hash]==null)
            return false;
        else{
            Node n=arr[hash];
            while(n!=null){
                if(n.val==key)
                    return true;
                n=n.next;
            }
        }
        return false;
    }
}

 通过此题 可以很好的理解hashmap的设计,核心上是个链表的数组,也就是常说的桶的结构

以上是关于leetcode 705 设计哈希映射的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—705. 设计哈希集合(集合)—day74

Leetcode刷题100天—705. 设计哈希集合(集合)—day74

LeetCode 705. Design HashSet (设计哈希集合)

[Leetcode] 0705. 设计哈希集合

705.设计哈希集合

Leetcode刷题100天—706. 设计哈希映射(哈希表)—day74