源码梳理——Jedis中的集合JedisByteHashMap
一、JedisByteHashMap
JedisByteHashMap是Jedis中實(shí)現(xiàn)存儲(chǔ)鍵和值均為byte[]字節(jié)數(shù)組的Map集合類,它利用HashMap作為鍵-值對(duì)實(shí)際存儲(chǔ)集合,對(duì)Map中的方法進(jìn)行重寫來達(dá)到Jedis需要的存儲(chǔ)鍵-值對(duì)均為字節(jié)數(shù)組的需要。該類是非線程安全的。
二、源碼分析
該類實(shí)現(xiàn)上沒什么復(fù)雜的地方,個(gè)人覺得比較有趣的一個(gè)實(shí)現(xiàn)是對(duì)鍵進(jìn)行了包裝。HashMap在實(shí)現(xiàn)鍵值對(duì)映射時(shí),會(huì)調(diào)用鍵的equals和hashCode方法,byte[]數(shù)組這兩個(gè)方法均是從Object繼承而來,顯然不滿足需求,于是JedisByteHashMap中的內(nèi)部類對(duì)byte[]數(shù)組進(jìn)行了簡(jiǎn)單的包裝來滿足需求,這實(shí)際上用到了適配器的設(shè)計(jì)思想。
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);}}同樣為了實(shí)現(xiàn)entrySet方法,返回鍵和值均為字節(jié)數(shù)組的Entry對(duì)象,JedisByteHashMap也實(shí)現(xiàn)了對(duì)Entry進(jìn)行包裝的內(nèi)部類
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;}}```總結(jié)
以上是生活随笔為你收集整理的源码梳理——Jedis中的集合JedisByteHashMap的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 发送ajax请求
- 下一篇: Echarts图标自适应问题(已解决)