简单版的数组实现哈希表

java 复制代码
package com.wei.mybatisflex;


import java.util.ArrayList;
import java.util.List;

/**
 * 用数组实现哈希表
 */
public class ArrayToHash {
    /**
     * 键值对定义
     */
    class Pair{
        private int key;
        private String val;

        public Pair(int key, String val) {
            this.key = key;
            this.val = val;
        }
    }
    private List<Pair> buckets;
    public ArrayToHash(){
        //初始化100个桶
        buckets = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            buckets.add(null);
        }
    }

    /**
     * 哈希函数
     */
    public int hashFunc(int key) {
        int index = key % 100;
        return index;
    }

    /**
     * 查询操作
     */
    public String get(int key) {
        int index = hashFunc(key);
        Pair pair = buckets.get(index);
        if (pair == null){
            return null;
        }
        return pair.val;
    }

    /**
     * 添加操作
     */
    public void insert(int key, String val) {
        Pair pair = new Pair(key,val);
        int index = hashFunc(key);
        buckets.set(index,pair);
    }

    /**
     * 删除操作
     */
    public void delete(int key) {
        int index = hashFunc(key);
        buckets.set(index, null);
    }

    /**
     * 修改
     */
    public void update(int key, String val) {
        int index = hashFunc(key);
        Pair pair = new Pair(key,val);
        buckets.set(index, pair);
    }

    /**
     * 获取所有键值对
     */
    public List<Pair> pairSet() {
        ArrayList<Pair> pairs = new ArrayList<>();
        for (Pair pair:buckets
             ) {
            if (pair != null) {
                pairs.add(pair);
            }
        }return pairs;
    }

    /**
     * 获取所有键
     */
    public List<Integer> KeySet() {
        ArrayList<Integer> keys = new ArrayList<>();
        for (Pair pair :buckets
        ) {
            if (pair != null) {
                keys.add(pair.key);
            }
        }return keys;
    }

    /**
     * 获取所有值
     */
    public List<String> ValueSet() {
        ArrayList<String> vals = new ArrayList<>();
        for (Pair pair :buckets) {
            if (pair != null) {
                vals.add(pair.val);
            }
        }return vals;
    }
    /**
     * 打印哈希表
     */
    public void print(){
        for (Pair pair :
                pairSet()) {
            System.out.println(pair.key+"->"+pair.val);
        }
    }
    /**
     * 测试
     */
    public static void main(String[] args) {
        ArrayToHash hash = new ArrayToHash();
        hash.insert(123, "34");
        hash.insert(124, "35");
        hash.insert(125, "36");
        hash.insert(126, "37");
        hash.insert(127, "38");
        System.out.println("哈希表展示如下:");
        hash.print();
        System.out.println("==================");
        String s = hash.get(23);
        System.out.println("k=123对应的val值是:"+s);
        System.out.println("==================");
        hash.update(124, "99");
        System.out.println("把key=124的值换成99");
        hash.print();
        System.out.println("==================");
        hash.delete(124);
        System.out.println("删除key=124所对应的值:");
        hash.print();
    }
}

运行结果展示:

相关推荐
运器1234 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
岁忧4 小时前
(LeetCode 每日一题) 1865. 找出和为指定值的下标对 (哈希表)
java·c++·算法·leetcode·go·散列表
英雄哪里出来13 天前
《哈希表》K倍区间(解题报告)
数据结构·算法·散列表·哈希表·解题报告
岁忧15 天前
(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)
java·c++·算法·leetcode·go·散列表
武帝为此17 天前
【数据结构中哈希函数与哈希表】
数据结构·哈希算法·散列表
青山是哪个青山21 天前
位运,模拟,分治,BFS,栈和哈希表
算法·散列表·宽度优先
Tess_Blingbling23 天前
力扣Hoot100 第一天 | 哈希3题
leetcode·哈希算法·散列表
大白曾是少年23 天前
哈希表三种数据结构在leetcode中的使用情况分析
数据结构·leetcode·散列表
豪斯有话说1 个月前
C++_哈希表
数据结构·c++·散列表
GalaxyPokemon1 个月前
LeetCode - 3. 无重复字符的最长子串
算法·哈希算法·散列表