java哈希集中的歧义
为什么以下代码的输出是2而不是1?HashSet不允许重复的元素java哈希集中的歧义,java,hashset,Java,Hashset,为什么以下代码的输出是2而不是1?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 =
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());
}
}
import java.util.*;
导入java.io.*;
导入java.math.*;
公共类main 1
{
静态类对
{
int x;
int-y;
公共对(int k,int p)
{
x=k;
y=p;
}
}
公共静态void main(字符串[]args)引发IOException
{
Set hs=新的HashSet();
hs.add(新的一对(1,2));
hs.add(新的一对(1,2));
System.out.println(hs.size());
}
}
您必须重写等于和哈希代码
从Java的Set
接口文档中:
不包含重复元素的集合。更正式地说,集合不包含e1和e2元素对,因此e1.equals(e2)最多包含一个空元素
请注意,以下内容将打印为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);
}
}
您必须重写等于
和哈希代码
从Java的Set
接口文档中:
不包含重复元素的集合。更正式地说,集合不包含e1和e2元素对,因此e1.equals(e2)最多包含一个空元素
请注意,以下内容将打印为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);
}
}