0

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

请注意,pair2in 不是映射中的键,而是pair1。所以当我这样做的时候

map.get(pair1);
map.get(pair2);

给我同样的结果"Young"

我应该做哪些额外的事情来实现它?

4

2 回答 2

2

您将不得不在 Pair 类中覆盖equals()和。hashcode()另请参阅这些https://stackoverflow.com/a/2265637/869488

https://stackoverflow.com/a/27609/869488(检查这些答案的“还记得”标题)

于 2013-03-13T06:13:24.277 回答
1

在类中重写hashCode()equals()方法,Pair以便,

pair1 = new Pair("name1", "address1");
pair2 = new Pair("address1", "name1");

将在哈希图中的相同哈希桶中。当您正确覆盖该hashCode()方法以确保相等的对象获得相等的哈希码时,hashmap 能够找到两个相等的对象并将它们放在同一个哈希桶中。

于 2013-03-13T06:16:19.847 回答