一 题目概述
不使用任何内建的哈希表库设计一个哈希集合
具体地说,你的设计应该包含以下的功能
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的设计,核心上是个链表的数组,也就是常说的桶的结构
原文地址:https://www.cnblogs.com/caijiwdq/p/10853269.html
时间: 2024-10-10 05:38:45