zoukankan      html  css  js  c++  java
  • 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的设计,核心上是个链表的数组,也就是常说的桶的结构

  • 相关阅读:
    1059. C语言竞赛(20)
    1057. 数零壹(20)
    1056. 组合数的和(15)
    1054. 求平均值 (20)
    1052. 卖个萌 (20)
    1053. 住房空置率 (20)
    第五周课后作业02(动手动脑)
    课堂动手动脑
    课后作业
    课堂测试动手动脑
  • 原文地址:https://www.cnblogs.com/caijiwdq/p/10853269.html
Copyright © 2011-2022 走看看