设计如下:储存的value是一个字符串,key就是字符串的长度。用一个链表数组储存,暂时还比较简单。
package myHashTable;
public class myHashTable {
class Node {
int key;
String content;
Node next;
Node(String content) {
this.content = content;
this.key = content.length();
}
}
class NodeList {
Node root = null;
void InsertNode(Node node) {
if (root == null) {
root = node;
} else {
Node cur = root;
while (cur.next != null) {
cur = cur.next;
}
cur.next = node;
}
}
void ShowNodeList() {
Node cur = root;
while (cur != null) {
System.out.print(cur.content + " ");
cur = cur.next;
}
System.out.println();
}
}
static NodeList[] array;//静态列表
int length;
public myHashTable(int length) {
this.length = length;
array = new NodeList[length];
for (int i = 0; i < length; i++) {
array[i] = new NodeList();
}
}
public int getLength() {
return length;
}
public NodeList getArray(int i) {
return array[i];
}
public void addContent(String content) {
Node node = new Node(content);
int index = node.key % length;
array[index].InsertNode(node);
}
public static void main(String[] args) {
String[] strs = {"q", "qq", "qqq", "qqqq", "qqqqq", "a", "aa", "aaa", "aaaa", "aaaaa", "dddddd"};
int length = 5;
myHashTable table = new myHashTable(5);
for (int i = 0; i < strs.length; i++) {
table.addContent(strs[i]);
}
for (int i = 0; i < length; i++) {
System.out.println("当前的key:" + i + " ");
array[i].ShowNodeList();
}
}
}
运行结果: