源码梳理——Jedis中的集合JedisByteHashMap

简介: 本文分析了jedis中集合JedisByteHashMap的源码

一、JedisByteHashMap

JedisByteHashMap是Jedis中实现存储键和值均为byte[]字节数组的Map集合类,它利用HashMap作为键-值对实际存储集合,对Map中的方法进行重写来达到Jedis需要的存储键-值对均为字节数组的需要。该类是非线程安全的。

二、源码分析

该类实现上没什么复杂的地方,个人觉得比较有趣的一个实现是对键进行了包装。HashMap在实现键值对映射时,会调用键的equals和hashCode方法,byte[]数组这两个方法均是从Object继承而来,显然不满足需求,于是JedisByteHashMap中的内部类对byte[]数组进行了简单的包装来满足需求,这实际上用到了适配器的设计思想。

private static final class ByteArrayWrapper {
        private final byte[] data;

        public ByteArrayWrapper(byte[] data) {
            if (data == null) {
                throw new NullPointerException();
            }
            this.data = data;
        }

        public boolean equals(Object other) {
            if (!(other instanceof ByteArrayWrapper)) {
                return false;
            }
            return Arrays.equals(data, ((ByteArrayWrapper) other).data);
        }

        public int hashCode() {
            return Arrays.hashCode(data);
        }
    }

同样为了实现entrySet方法,返回键和值均为字节数组的Entry对象,JedisByteHashMap也实现了对Entry进行包装的内部类


private static final class JedisByteEntry implements Entry<byte[], byte[]> {
        private byte[] value;
        private byte[] key;

        public JedisByteEntry(byte[] key, byte[] value) {
            this.key = key;
            this.value = value;
        }

        public byte[] getKey() {
            return this.key;
        }

        public byte[] getValue() {
            return this.value;
        }

        public byte[] setValue(byte[] value) {
            this.value = value;
            return value;
        }

    }```  
目录
相关文章
|
4月前
|
存储 算法 Java
史上最全的Java容器集合之LinkedHashMap(源码解读)
史上最全的Java容器集合之LinkedHashMap(源码解读)
293 0
史上最全的Java容器集合之LinkedHashMap(源码解读)
|
4月前
|
安全 Java 应用服务中间件
史上最全的Java容器集合之HashMap(源码解读)(二)
史上最全的Java容器集合之HashMap(源码解读)(二)
40 0
史上最全的Java容器集合之HashMap(源码解读)(二)
|
4月前
|
存储 Java 索引
史上最全的Java容器集合之HashMap(源码解读)(一)
史上最全的Java容器集合之HashMap(源码解读)(一)
44 0
|
NoSQL Java Redis
jedis-jedis 常规操作演示 | 学习笔记
快速学习jedis-jedis 常规操作演示
74 0
|
存储 Java
Java难点 | Map集合两种遍历方式
Map集合的遍历既重要也是比较难理解,本文将对Map的两种遍历方式展开详细的介绍,通过举例、代码实战的方式,让你彻底掌握Map集合的两种遍历方式。
155 0
Java难点 | Map集合两种遍历方式
|
存储 Java
Java中Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式
Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式的简单示例
110 0
Java中Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式
|
存储 安全 Java
Java容器 | 基于源码分析List集合体系
List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM、集合、并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴价值。
77 0
Java容器 | 基于源码分析List集合体系
|
安全 Java 容器
史上最全的Java容器集合之HashSet(源码解读)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
108 0
|
存储 Java 索引
史上最全的Java容器集合之HashMap(源码解读)(上)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
104 0
|
安全 Java 应用服务中间件
史上最全的Java容器集合之HashMap(源码解读)(下)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
83 0