美文网首页
java分离链式法实现 HashTable的代码

java分离链式法实现 HashTable的代码

作者: xintiantian | 来源:发表于2019-01-29 11:37 被阅读0次

如下的资料是关于java分离链式法实现 HashTable的代码。

protected Entry(int hash, K key, V value, Entry<K,V> next) {

    this.hash = hash;

    this.key = key;

    this.value = value;

    this.next = next;

}

而下面程序使用了LinkedList,使代码更简单更清晰易懂。

package changsheng.algorithms.hash;

import java.util.LinkedList;

public class SeparateChainingHashTable<T> {

public SeparateChainingHashTable() {

this(DEFAULT_TABLE_SIZE);

}

@SuppressWarnings("unchecked")

public SeparateChainingHashTable(int size) {

theLists = (LinkedList<T>[]) new LinkedList[nextPrime(size)];

for (int i = 0; i < theLists.length; i++)

theLists[i] = new LinkedList<T>();

}

public void insert(T x) {

LinkedList<T> whichList = theLists[x.hashCode() % theLists.length];

if (!whichList.contains(x)) {

whichList.addFirst(x);

}

}

public boolean remove(T x) {

return theLists[x.hashCode() % theLists.length].remove(x);

}

public boolean find(T x) {

return theLists[x.hashCode() % theLists.length].contains(x);

}

public void makeEmpty() {

for (int i = 0; i < theLists.length; i++)

theLists[i].clear();

}

private static final int DEFAULT_TABLE_SIZE = 101;

private LinkedList<T>[] theLists;

private static int nextPrime(int n) {

if (n % 2 == 0)

n++;

for (; !isPrime(n); n += 2)

;

return n;

}

private static boolean isPrime(int n) {

if (n == 2 || n == 3)

return true;

if (n == 1 || n % 2 == 0)

return false;

if (n % i == 0)

return false;

return true;

}

public static void main(String[] args) {

SeparateChainingHashTable<Integer> H = new SeparateChainingHashTable<Integer>();

final int NUMS = 4000;

final int GAP = 37;

System.out.println("Checking... (no more output means success)");

for (int i = GAP; i != 0; i = (i + GAP) % NUMS)

H.insert(new Integer(i));

for (int i = 1; i < NUMS; i += 2)

H.remove(new Integer(i));

for (int i = 2; i < NUMS; i += 2)

if (!H.find(new Integer(i)))

System.out.println("Find fails " + i);

for (int i = 1; i < NUMS; i += 2) {

if (H.find(new Integer(i)))

System.out.println("OOPS!!! " + i);

}

}

}

相关文章

网友评论

      本文标题:java分离链式法实现 HashTable的代码

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