Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的映射对象_Java_Mapping - Fatal编程技术网

Java中的映射对象

Java中的映射对象,java,mapping,Java,Mapping,我想在Java中实现以下想法:如果我将一个具有2个成员的类的一个对象映射到一个布尔值,并创建具有相同2个成员值的同一类的另一个对象,那么第二个对象应该映射到与第一个对象相同的布尔值 这是C++中的代码,希望解释我正在做的事情: #include <iostream> #include <map> using namespace std; class A{ int x; int y; public: A(int a, int b){

我想在Java中实现以下想法:如果我将一个具有2个成员的类的一个对象映射到一个布尔值,并创建具有相同2个成员值的同一类的另一个对象,那么第二个对象应该映射到与第一个对象相同的布尔值

这是C++中的代码,希望解释我正在做的事情:

#include <iostream>
#include <map>

using namespace std;


class A{
    int x;
    int y;

public:
    A(int a, int b){
        x = a;
        y = b;
    }
    bool operator < (const A &another) const{
        return x < another.x || y < another.y;
    }
};


int main() {

    A a(1,2),b(1,2);

    map <A,bool> exists;

    exists[a]=true;

    if(exists[b]){
        cout << "(1,2) exists" << endl;
    }
    else{
        cout << "(1,2) does not exist" << endl;
    }

    return 0;
}
#包括
#包括
使用名称空间std;
甲级{
int x;
int-y;
公众:
A(整数A,整数b){
x=a;
y=b;
}
布尔运算符<(常数A和另一个)常数{
返回xcout为了让一个对象充当
HasMap
中的键,您需要覆盖它的
equals(object)
hashCode()
方法:

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    A a = (A) o;
    return x == a.x &&
            y == a.y;
}

@Override
public int hashCode() {
    return Objects.hash(x, y);
}

为了让对象充当
HasMap
中的键,您需要覆盖其
equals(object)
hashCode()
方法:

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    A a = (A) o;
    return x == a.x &&
            y == a.y;
}

@Override
public int hashCode() {
    return Objects.hash(x, y);
}

你的类,
A
应该超越
equals
hashcode
方法

    public class A {
    private final int x;
    private final int y;

    public A(final int a, final int b) {
        this.x = a;
        this.y = b;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + x;
        result = prime * result + y;
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        A other = (A) obj;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }

}

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        A a = new A(1,2);
        A b = new A(1,2);

        Map <A,Boolean> exists =  new HashMap<A,Boolean>();

        exists.put(a,true);
        if(exists.containsKey(b)){
            System.out.println("(1,2) exists");
        }
        else{
            System.out.println("(1,2) does not exist");
        }
    }
}
公共A类{
私人最终int x;
私人终审法院;
公共A(最终内部A、最终内部b){
这个x=a;
这个y=b;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+x;
结果=素数*结果+y;
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
A其他=(A)obj;
如果(x!=其他.x)
返回false;
如果(y!=其他.y)
返回false;
返回true;
}
}
班长
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
A=新的A(1,2);
A b=新的A(1,2);
Map exists=新HashMap();
存在;
如果(存在,包括(b)){
System.out.println(“(1,2)存在”);
}
否则{
System.out.println(“(1,2)不存在”);
}
}
}

你的类,
A
应该超越
equals
hashcode
方法

    public class A {
    private final int x;
    private final int y;

    public A(final int a, final int b) {
        this.x = a;
        this.y = b;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + x;
        result = prime * result + y;
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        A other = (A) obj;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }

}

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        A a = new A(1,2);
        A b = new A(1,2);

        Map <A,Boolean> exists =  new HashMap<A,Boolean>();

        exists.put(a,true);
        if(exists.containsKey(b)){
            System.out.println("(1,2) exists");
        }
        else{
            System.out.println("(1,2) does not exist");
        }
    }
}
公共A类{
私人最终int x;
私人终审法院;
公共A(最终内部A、最终内部b){
这个x=a;
这个y=b;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+x;
结果=素数*结果+y;
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
A其他=(A)obj;
如果(x!=其他.x)
返回false;
如果(y!=其他.y)
返回false;
返回true;
}
}
班长
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
A=新的A(1,2);
A b=新的A(1,2);
Map exists=新HashMap();
存在;
如果(存在,包括(b)){
System.out.println(“(1,2)存在”);
}
否则{
System.out.println(“(1,2)不存在”);
}
}
}

谢谢。你能给我一些关于数组的想法吗?我的意思是如何实现hashcode()。我得到了equals()部分。好的,让我再次澄清一下。@AhsanTarique如果你有不同的问题,请打开一篇新的帖子。如果没有更多的上下文,很难理解评论中提出的问题(或代码)抱歉@Mureinik。我不确定这是否是一个不同的问题。这就是我所指的:
类a{private int arr[];…}
。如果你认为应该在不同的问题中问这个问题,请让我知道。谢谢。你能告诉我在数组的情况下该怎么做吗?我的意思是如何实现hashcode()。我得到了equals()部分。好的,让我再次澄清。@AhsanTarique如果你有不同的问题,请打开一篇新的帖子。如果没有更多的上下文(或代码),很难理解评论中提出的问题。抱歉@Mureinik。我不确定这是否是一个不同的问题。这就是我所指的:
class a{private int arr[];…}
。如果您认为应该在另一个问题中询问此问题,请告诉我。