我有一个Pair类和 -
Map<Pair<String, String>, String> map = new HashMap<Pair<String, String>, String>();
map.put(new Pair("name1", "address1"), "Young");
map.put(new Pair("name2", "address2"), "Old");
.
.
. and so on.
现在我有一个要求,我必须将两对视为相等
pair1 = new Pair("name1", "address1");
pair2 = new Pair("address1", "name1");
请注意,pair2
不是地图中的关键字,而是pair1
。所以当我做的时候
map.get(pair1);
map.get(pair2);
给我的结果与"Young"
;
我应该做些什么来实现它?
答案 0 :(得分:2)
您必须在Pair类中覆盖equals()
和hashcode()
。
另请参阅这些https://stackoverflow.com/a/2265637/869488
https://stackoverflow.com/a/27609/869488(查看这些答案的“还记得”标题)
答案 1 :(得分:1)
覆盖hashCode()
类中的equals()
和Pair
方法,以便
pair1 = new Pair("name1", "address1");
pair2 = new Pair("address1", "name1");
将位于hashmap中的相同哈希桶中。当您正确覆盖hashCode()
方法以确保相等对象获得相同的哈希码时,哈希映射能够找到两个相等的对象并将它们放在同一个哈希桶中。