用java写一个哈希查找,详细解析
时间: 2024-03-09 19:47:01 浏览: 65
哈希算法查找
哈希查找(Hash Search)也称为散列表查找(Hash Table Search),是一种根据关键字直接访问数据的查找技术。哈希查找的核心是将关键字映射到一个固定的位置(即哈希地址)来进行查找,这种映射的函数称为哈希函数。
下面是使用Java实现哈希查找的步骤:
1. 创建一个哈希表数组,数组的大小应该大于等于所有关键字的个数。哈希表可以是一个对象数组,也可以是一个链表数组,这里我们选择使用链表数组实现。
```
class HashNode {
int key;
int value;
HashNode next;
public HashNode(int key, int value) {
this.key = key;
this.value = value;
this.next = null;
}
}
public class HashTable {
private HashNode[] table;
private int capacity;
public HashTable(int capacity) {
this.capacity = capacity;
this.table = new HashNode[capacity];
}
}
```
2. 实现哈希函数,将关键字映射到哈希地址。
```
private int hash(int key) {
return key % capacity;
}
```
这里我们使用取余法实现哈希函数,因为它比较简单,而且可以确保哈希地址在数组范围内。
3. 实现插入操作,将关键字和值插入到哈希表中。
```
public void insert(int key, int value) {
int hash = hash(key);
HashNode node = new HashNode(key, value);
if (table[hash] == null) {
table[hash] = node;
} else {
HashNode current = table[hash];
while (current.next != null) {
current = current.next;
}
current.next = node;
}
}
```
如果哈希地址上已经有节点,就遍历链表直到找到链表末尾,然后将新节点插入到末尾。
4. 实现查找操作,根据关键字查找对应的值。
```
public int get(int key) {
int hash = hash(key);
HashNode current = table[hash];
while (current != null) {
if (current.key == key) {
return current.value;
}
current = current.next;
}
return -1; // 表示未找到
}
```
首先根据关键字计算哈希地址,然后在对应位置的链表上遍历查找,如果找到了就返回对应的值。
5. 测试代码
```
public static void main(String[] args) {
HashTable table = new HashTable(10);
table.insert(1, 100);
table.insert(2, 200);
table.insert(3, 300);
System.out.println(table.get(1)); // 输出 100
System.out.println(table.get(2)); // 输出 200
System.out.println(table.get(3)); // 输出 300
System.out.println(table.get(4)); // 输出 -1
}
```
以上就是使用Java实现哈希查找的详细解析。
阅读全文