简单版的数组实现哈希表

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 小时前
四数相加贰——哈希表
数据结构·python·算法·leetcode·散列表
UP_Continue8 小时前
C++--哈希封装my_unordered_set和my_unordered_map
c++·哈希算法·散列表
beordie.cloud8 小时前
LeetCode 49. 字母异位词分组 | 从排序到计数的哈希表优化之路
算法·leetcode·散列表
如竟没有火炬10 小时前
快乐数——哈希表
数据结构·python·算法·leetcode·散列表
草莓熊Lotso11 小时前
哈希表封装 myunordered_map/myunordered_set 实战:底层原理 + 完整实现
服务器·开发语言·数据结构·c++·人工智能·哈希算法·散列表
纵有疾風起1 天前
【C++—STL】哈希表底层封装与unorderedset/unorderedmap模拟实现
开发语言·数据结构·c++·stl·哈希算法·散列表
UP_Continue2 天前
哈希表实现--开放定址法
数据结构·哈希算法·散列表
Tisfy3 天前
LeetCode 3583.统计特殊三元组:哈希表计数
算法·leetcode·散列表·题解·哈希表·计数
程序员-周李斌4 天前
ArrayBlockingQueue 源码解析
java·开发语言·后端·哈希算法·散列表
小李小李快乐不已4 天前
哈希表理论基础
数据结构·c++·哈希算法·散列表