hash是很多高级数据结构和算法的基础,比如集合的HashMap、HashTable...
以下demo实现了一个简易的hash结构:
这里链表需要引入单向链表,具体查看另外一篇文章《单向链表》
import com.xxx.xxx.SignLinked;
import com.xxx.xxx..SignLinkedNode;
hash实现:数组+链表 MyHash.java
/**
* hash结构
*/
public class MyHash {
//链表数组
private SignLinked[] links;
//hash表数组长度
private int size;
public MyHash() {
}
/**
* 初始化
*
* @param size
*/
public MyHash(int size) {
//初始化链表数组长度
this.links = new SignLinked[size];
//初始化一下
for (int i = 0; i < size; i++) {
this.links[i] = new SignLinked();
}
}
/**
* 遍历hash数据
*/
public void show() {
for (int i = 0; i < this.links.length; i++) {
System.out.printf("%d: ", i);
SignLinkedNode temp = links[i].head;
while (temp != null) {
System.out.printf(temp + ", ");
temp = temp.next;
}
System.out.println();
}
}
/**
* 添加节点
* @param value 值
*/
public void add(int value) {
this.links[value % this.links.length].add(value);
}
/**
* 查找
* @param value 值
*/
public void find(int value) {
//hash到链
SignLinked link = this.links[value % this.links.length];
link.getByValue(value);
}
public static void main(String[] args) {
//hsah的链表数量
int size = 10;
MyHash myHash = new MyHash(size);
//初始化hash
System.out.println("数组...");
int[] arr = {44, 43, 28, 41, 75, 13, 41, 56, 50, 91, 8, 91, 67, 77, 11, 64, 38, 9, 65, 8, 1, 28, 19, 92, 78, 23, 84, 52, 64, 0, 13, 67, 52};
System.out.println(Arrays.toString(arr));
for (int value : arr) {
myHash.add(value);
}
System.out.println("遍历: ");
myHash.show();
System.out.println("查找: ");
myHash.find(28);
}
}