为什么我为以下代码而不是1获取输出2? HashSet不允许重复元素。
import java.util.*;
import java.io.*;
import java.math.*;
public class Main1
{
static class pair
{
int x;
int y;
public pair (int k, int p)
{
x = k;
y = p;
}
}
public static void main(String[] args)throws IOException
{
Set<pair> hs=new HashSet<pair>();
hs.add(new pair(1,2));
hs.add(new pair(1,2));
System.out.println(hs.size());
}
}
答案 0 :(得分:2)
您必须覆盖equals
和hashcode
。
来自Java Set
接口的文档:
不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素。
请注意,以下内容将打印为false:
pair p1 = new pair(1, 2);
pair p2 = new pair(1, 2);
System.out.println(p1.equals(p2));
另请注意,java约定是以大写字母开始类名。
这将为您完成工作:
class Pair {
int x;
int y;
public pair(int k, int p) {
x = k;
y = p;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
pair pair = (pair) o;
return x == pair.x && y == pair.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}