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