java哈希集中的歧义

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 =

为什么以下代码的输出是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 = 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);
    }
}