如果Map的键具有相似的属性但顺序不同,那么它们如何被视为相等?

时间:2013-03-13 06:09:54

标签: java map hashmap

我有一个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";

相同

我应该做些什么来实现它?

2 个答案:

答案 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()方法以确保相等对象获得相同的哈希码时,哈希映射能够找到两个相等的对象并将它们放在同一个哈希桶中。