Java 当';键';是两个整数吗? 包点; //使用MyPoint然后使用随机x、y点填充阵列arr 公共静态void main(字符串[]args)引发IOException{ HashMap=newHashMap(); 整数val=0; 对于(int i=0;i

Java 当';键';是两个整数吗? 包点; //使用MyPoint然后使用随机x、y点填充阵列arr 公共静态void main(字符串[]args)引发IOException{ HashMap=newHashMap(); 整数val=0; 对于(int i=0;i,java,Java,这是我的代码MyPoint存储x,y点。我使用这段代码来获得x,y点的唯一集合,没有重复 我的问题是如何在MyPoint中检索XY值?这是使用HashMap筛选唯一的x,y点的有效方法吗?这是我编写的HashCode 有更好的哈希代码吗?一个简单的方法是为x和y生成getter方法: package point; //an array arr is populated with random x,y points using MyPoint then public st

这是我的代码MyPoint存储x,y点。我使用这段代码来获得x,y点的唯一集合,没有重复

我的问题是如何在MyPoint中检索XY值?这是使用HashMap筛选唯一的x,y点的有效方法吗?这是我编写的HashCode


有更好的哈希代码吗?

一个简单的方法是为x和y生成getter方法:

    package point;

    //an array arr is populated with random x,y points using MyPoint then
    public static void main(String[] args) throws IOException {
    HashMap<MyPoint,Integer> map = new HashMap<MyPoint,Integer>();
    Integer val =0;

    for(int i = 0; i < arr.length ; i++)
    {
        map.put(arr[i],val);
    }
    }


//second file.
package point;
public class MyPoint implements Comparable<MyPoint>{

private int x;
private int y;

public MyPoint(int x1, int y1) {
    x = x1;
    y = y1;
}

public boolean equals(Object p) {
    MyPoint p1;
    try {p1 = (MyPoint) p;}
    catch (ClassCastException ex) {return false;}
    return (x == p1.x) && (y == p1.y);
}

public int hashCode() {
    return ((y * 31) ^ x);
}

对于HashMap,您可以让它从X坐标映射到具有该X坐标和唯一Y坐标的MyPoints列表(HashMap)。但是,如果您只需要寻找唯一性,您可以将每个MyPoint存储在set/ArrayList中,并使用.equals()查看是否已经存在类似的点方法。希望有帮助!

我使用Set entries=map.keySet();for(mypointe:entries){System.out.print(“[”+e.getX()+”,“+”+e.getY()+”);)对于x,y来说似乎工作得很好我正在开发一个可以将它们组合成一个的函数,但我认为这应该可以工作。谢谢!请注意,hashcode不一定是唯一的。出于性能原因,您只希望它最小化冲突。即使
hashcode
始终返回
1
HashMap仍然可以工作,so只要
等于
工作正常。
public int getX(){
  return x;
}

public int getY(){
   return y;
}