SeparateChainingHashST

賈小強
转载请注明原创出处,谢谢!
package com.lab1.test3; import java.util.LinkedList; import java.util.Queue; public class SeparateChainingHashST { private static final int INIT_CAPACITY = 4; private int n; private int m; private SequentailSearchST[] st; public SeparateChainingHashST() { this(INIT_CAPACITY); }public SeparateChainingHashST(int m) { this.m = m; st = new SequentailSearchST[m]; for (int i = 0; i < m; i++) { st[i] = new SequentailSearchST<>(); } }private void resize(int capacity) { SeparateChainingHashST temp = new SeparateChainingHashST<>(capacity); for (int i = 0; i < m; i++) { for (Key key : st[i].keys()) { temp.put(key, st[i].get(key)); } } this.m = temp.m; this.st = temp.st; }private int hash(Key key) { return (key.hashCode() & 0x7fffffff) % m; }private void delete(Key key) { int i = hash(key); if (st[i].contains(key)) { n--; } st[i].delete(key); if (n <= m * 2) { resize(m / 2); } }private Iterable keys() { Queue queue = new LinkedList<>(); for (int i = 0; i < m; i++) { for (Key key : st[i].keys()) { queue.add(key); } } return queue; }private Value get(Key key) { int i = hash(key); return st[i].get(key); }private boolean contains(Key key) { return get(key) != null; }private boolean isEmpty() { return n == 0; }private int size() { return n; }private void put(Key key, Value value) { if (n >= m * 10) { resize(m * 2); } int i = hash(key); if (!st[i].contains(key)) { n++; } st[i].put(key, value); }public static void main(String[] args) { SeparateChainingHashST st = new SeparateChainingHashST<>(); String test = "S E A R C H E X A M P L E"; String[] keys = test.split(" "); for (int i = 0; i < keys.length; i++) { st.put(keys[i], i); } System.out.println("size= " + st.size()); System.out.println("isEmpty= " + st.isEmpty()); System.out.println("contains= " + st.contains("S")); st.delete("S"); System.out.println("contains= " + st.contains("S")); for (String key : st.keys()) { System.out.println(key + " " + st.get(key)); } } }

输出
size= 10 isEmpty= false contains= true contains= false L 11 P 10 X 7 H 5 M 9 A 8 E 12 R 3 C 4

【SeparateChainingHashST】Happy learning !!

    推荐阅读