简单版的数组实现哈希表

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();
    }
}

运行结果展示:

相关推荐
阿林学习计算机2 天前
哈希表实现unordered_map
数据结构·哈希算法·散列表
MOONICK4 天前
数据结构——哈希表
数据结构·哈希算法·散列表
飞鱼&5 天前
java数据结构
数据结构·二叉树·散列表·红黑树
多喝开水少熬夜6 天前
算法-哈希表和相关练习-java
java·算法·散列表
HY小海6 天前
【C++】9.哈希表实现
数据结构·哈希算法·散列表
闭着眼睛学算法8 天前
【双机位A卷】华为OD笔试之【哈希表】双机位A-采购订单【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·华为od·散列表
_dindong9 天前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
还是码字踏实9 天前
基础数据结构之哈希表:两数之和(LeetCode 1 简单题)
数据结构·leetcode·散列表
一匹电信狗11 天前
【C++】哈希表详解(开放定址法+哈希桶)
服务器·c++·leetcode·小程序·stl·哈希算法·散列表
再睡一夏就好12 天前
【C++闯关笔记】unordered_map与unordered_set的底层:哈希表(哈希桶)
开发语言·c++·笔记·学习·哈希算法·散列表