源码梳理——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;
        }

    }```  
目录
相关文章
|
6月前
|
存储 索引 容器
数据结构之Map/Set讲解+硬核源码剖析(二)
数据结构之Map/Set讲解+硬核源码剖析(二)
73 0
|
6月前
集合源码分析
集合源码分析
55 0
|
6月前
|
存储 自然语言处理 Java
数据结构之Map/Set讲解+硬核源码剖析(一)
数据结构之Map/Set讲解+硬核源码剖析(一)
51 0
|
6月前
|
存储 Java
数据结构之Map/Set讲解+硬核源码剖析(三)
数据结构之Map/Set讲解+硬核源码剖析(三)
34 0
|
11月前
|
安全 Java 应用服务中间件
史上最全的Java容器集合之HashMap(源码解读)(二)
史上最全的Java容器集合之HashMap(源码解读)(二)
51 0
史上最全的Java容器集合之HashMap(源码解读)(二)
|
11月前
|
存储 Java 索引
史上最全的Java容器集合之HashMap(源码解读)(一)
史上最全的Java容器集合之HashMap(源码解读)(一)
56 0
|
存储
HashMap源码解读(下篇)
HashMap源码解读(下篇)
103 0
HashMap源码解读(下篇)
|
存储 Java 索引
HashMap源码解读(中篇)
HashMap源码解读(中篇)
108 0
HashMap源码解读(中篇)
|
NoSQL Java Redis
jedis-jedis 常规操作演示 | 学习笔记
快速学习jedis-jedis 常规操作演示
|
存储 安全 Java
Java容器 | 基于源码分析List集合体系
List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM、集合、并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴价值。
99 0
Java容器 | 基于源码分析List集合体系