数据结构———哈希表

目录

基本概念

哈希表常用操作

基本实现

哈希冲突与扩容

哈希冲突

扩容

哈希冲突

链式地址

开放地址

1.   线性探测

2.   平方探测

3.   多次哈希

注意

哈希算法

定义:

关键特性

常见的哈希算法

其他哈希算法

在Java中的实现


基本概念

哈希表(hash table),又称散列表,它通过建立键key 与值value 之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key ,则可以在(1) 时间内获取对应的值value 。

‧ 添加元素:仅需将元素添加至数组(链表)的尾部即可,使用(1) 时间。
‧ 查询元素:由于数组(链表)是乱序的,因此需要遍历其中的所有元素,使用() 时间。
‧ 删除元素:需要先查询到元素,再从数组(链表)中删除,使用() 时间。

                                        数组                链表                哈希表
查找元素                         ()                 ()                 (1)
添加元素                         (1)                 (1)                 (1)
删除元素                         ()                 ()                 (1)

观察发现,在哈希表中进行增删查改的时间复杂度都是(1) ,非常高效。

哈希表常用操作

import java.util.HashMap;
import java.util.Map;

public class HashTableExample {
    public static void main(String[] args) {
        // 创建一个空的哈希表
        HashMap hashTable = new HashMap<>();

        // 插入键值对
        hashTable.put("one", 1);
        hashTable.put("two", 2);
        hashTable.put("three", 3);

        // 查找键值对
        Integer value = hashTable.get("two");
        System.out.println("Value for 'two': " + value);

        // 更新键值对
        hashTable.put("two", 22);

        // 删除键值对
        hashTable.remove("two");

        // 清空哈希表
        hashTable.clear();

        // 检查是否包含键
        boolean containsTwo = hashTable.containsKey("two");
        System.out.println("Contains 'two': " + containsTwo);

        // 获取键集合
        Map map = new HashMap<>(hashTable);
        System.out.println("Keys: " + map.keySet());

        // 获取值集合
        System.out.println("Values: " + map.values());

        // 获取哈希表大小
        int size = hashTable.size();
        System.out.println("Size of the hash table: " + size);
    }
}
输出结果
Value for 'two': 2
Contains 'two': false
Keys: []
Values: []
Size of the hash table: 0

说明
HashMap hashTable = new HashMap<>(); 创建了一个新的空哈希表。
hashTable.put("key", value) 用于插入键值对。
hashTable.get("key") 用于获取键对应的值,如果键不存在则返回 null。
hashTable.remove("key") 用于删除键值对。
hashTable.clear() 清空哈希表。
hashTable.containsKey("key") 检查键是否存在。
hashTable.keySet() 和 hashTable.values() 分别返回键和值的集合。
hashTable.size() 返回哈希表中键值对的数量。

你可能感兴趣的:(算法与数据结构,数据结构,散列表)