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

    }```  
目录
相关文章
|
5月前
|
存储 索引 容器
数据结构之Map/Set讲解+硬核源码剖析(二)
数据结构之Map/Set讲解+硬核源码剖析(二)
70 0
|
5月前
集合源码分析
集合源码分析
54 0
|
5月前
|
存储 Java
数据结构之Map/Set讲解+硬核源码剖析(三)
数据结构之Map/Set讲解+硬核源码剖析(三)
32 0
|
10月前
|
安全 Java 应用服务中间件
史上最全的Java容器集合之HashMap(源码解读)(二)
史上最全的Java容器集合之HashMap(源码解读)(二)
51 0
史上最全的Java容器集合之HashMap(源码解读)(二)
|
10月前
|
存储 算法 Java
史上最全的Java容器集合之LinkedHashMap(源码解读)
史上最全的Java容器集合之LinkedHashMap(源码解读)
322 0
史上最全的Java容器集合之LinkedHashMap(源码解读)
|
5月前
|
存储 算法 安全
认真研究Java集合之HashSet 的实现原理
认真研究Java集合之HashSet 的实现原理
53 0
|
10月前
|
存储 Java 索引
史上最全的Java容器集合之HashMap(源码解读)(一)
史上最全的Java容器集合之HashMap(源码解读)(一)
52 0
|
存储 NoSQL Redis
五.Redis中那些你不知道的秘密-五大基本结构SortedSet的实现原理
SortedSet(zset)有序集合可以看做是在Set集合的的基础上为集合中的每个元素维护了一个顺序值: score,它允许集合中的元素可以按照score进行排序,所以它的经典实用场景如:考生按分数排名,某游戏玩家分数排行,网站首页某数据排行,最新评论按时间排序等等。 Redis是一个内存数据库,它在保证读写速度的同时也需要考虑内存开销,那对于SortedSet有序集合而言它需要维护一个顺序值,而对于有序集合的底层实现可以选择:数组,链表,平衡树或者红黑树等结构,但是SortedSet没有选择这些结构。数组插入和删除元素性能很差,链表查询慢,平衡树或红黑树虽然查询效率高,但是在插入和删除元
|
存储 Java 索引
HashMap源码解读(中篇)
HashMap源码解读(中篇)
106 0
HashMap源码解读(中篇)
|
NoSQL Java Redis
jedis-jedis 常规操作演示 | 学习笔记
快速学习jedis-jedis 常规操作演示