简单版的数组实现哈希表

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

运行结果展示:

相关推荐
-海绵东东-6 天前
哈希表······················
算法·leetcode·散列表
tobias.b6 天前
408真题解析-2010-41-数据结构-散列表
数据结构·散列表·计算机考研·408真题解析
Zhu_S W7 天前
深入理解哈希表:原理、源码与设计哲学
数据结构·散列表
fengxin_rou7 天前
一文吃透 Redis 压缩列表、listpack 及哈希表扩容与并发查询
数据库·redis·散列表
黄昏晓x9 天前
C++----哈希表
c++·哈希算法·散列表
元亓亓亓9 天前
考研408--数据结构--day14--B树&B+树&散列表
数据结构·b树·散列表·b+树·408
kronos.荒10 天前
滑动窗口+哈希表:最小覆盖子串
数据结构·python·散列表
UhMITKJvJkro14 天前
探索机器人运动规划的奇妙世界:从路径插值到轨迹再现
散列表
骇城迷影14 天前
代码随想录:哈希表篇
算法·哈希算法·散列表
拾光Ծ15 天前
哈希表进阶:挑战用哈希桶封装unordered_set和unordered_map,帮你深度理解迭代器!!!
数据结构·c++·哈希算法·散列表