举一个不太恰当的应用场景,比如需要找到某个班的班主任,有三个字段,年级,班级,班主任。现在需要由年级和班级快速查到班主任是谁。
(1)两个字段用分隔符拼接做key
代码参考如下,将两个数据按照特定的分隔符拼接,但是这有一个问题,就是key中含有此分隔符。
比如key1="a|",key2="b",key3="a",key4="|b",key1+key2和key3+key4相等,这样数据就有问题了,
所以除非保证不会发生这种情况,否则千万不要用
![](https://img.haomeiwen.com/i15433531/bc74906d46d40e44.png)
(2)将多个key封装成一个对象
代码参考如下,将key封装成对象,有一点需要注意,必须重写GradeClass的equals和hashCode。
![](https://img.haomeiwen.com/i15433531/a4dc5cdb4605d0ee.png)
(3)MultiKeyMap
代码参考如下,从名字也可以看出,支持多个key的map
![](https://img.haomeiwen.com/i15433531/b5c51d34a4d45be1.png)
![](https://img.haomeiwen.com/i15433531/1aa6aa7f9966e2f7.png)
那就看一下他为什么能支持多个key吧。所有的put方法,随便看其中一个就可以
![](https://img.haomeiwen.com/i15433531/d37791d715253a74.png)
put代码,其实很简单就是将key封装成了MultiKey,他的内部重写了equals和hashCode并且还对hashCode进行了优化。
![](https://img.haomeiwen.com/i15433531/e443c59b73e27b65.png)
总结
三种方式对比,1基本上没有任何优点。
2和3的选择我认为当key只有两个时直接用MultiKeyMap就可以了。如果更多的key,或者这些key可以
封装成一个比较有意义的对象,采用第二种比较好。
网友评论