不使用任何内建的哈希表库设计一个哈希集合
具体地说,你的设计应该包含以下的功能
add(value):向哈希集合中插入一个值。contains(value) :返回哈希集合中是否存在这个值。remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。注意:
所有的值都在 [1, 1000000]的范围内。操作的总数目在[1, 10000]范围内。不要使用内建的哈希集合库。思路一: 该方法较为简单,但性能较差,根据题意创建百万级的数组,用于一一映射要插入的数值,尽管题目的值是从1开始,但是实际测试用例却包含了0,所以需要将数组赋值为-1,不然判断是否contains(0)时,就会报错!
class MyHashSet { private int[] arr; /** Initialize your data structure here. */ public MyHashSet() { arr = new int[1000000]; for(int i = 0; i < arr.length; i++){ arr[i] = -1; } } public void add(int key) { arr[key] = key; } public void remove(int key) { if (arr[key] != key) { return; }else { arr[key] = -1; } } /** Returns true if this set did not already contain the specified element */ public boolean contains(int key) { if (arr[key] == key) { return true; } return false; } }**思路二:**使用List和LinkedList实现一个散列表
