gpt4 book ai didi

java - Java 中的映射对象

转载 作者:行者123 更新时间:2023-11-29 08:41:12 26 4
gpt4 key购买 nike

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

这是 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;
}

输出:

(1,2) exists

这里 a 和 b 不是同一个对象,但它们具有相同的成员值。所以它们映射到相同的 boolean 值。

我曾尝试在 Java 中使用 HashMap 来实现它但没有成功:

import java.util.*;
import java.lang.*;
import java.io.*;

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");
}
}
}

class A{
private int x;
private int y;

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

输出:

(1,2) does not exist

我应该如何在 Java 中实现它?

最佳答案

为了让对象作为 HashMap 中的键,您需要重写它的 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);
}

关于java - Java 中的映射对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40145909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com