2016-10-20 7 views
1

Javaで次のアイデアを実装したいと思います。2つのメンバーを持つクラスの1つのオブジェクトをブール値にマップし、同じ2つのメンバー値を持つ同じクラスの別のオブジェクトを作成すると、最初のブール値と同じブール値にマップする必要があります。Javaのオブジェクトのマッピング

#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)ここで

存在する。ここ

は、Cのコードがうまくいけば、私がやろうとしているかを説明することを++でありますとbは同じオブジェクトではありませんが、同じメンバー値を持ちます。したがって、それらは同じブール値にマップされます。

私は成功せず、これを実装するために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)

どのように実装する必要が存在しません。これはJava?オブジェクトは、あなたがそのequals(Object)hashCode()メソッドをオーバーライドする必要がHasMapでキーとして機能させるためには

答えて

2

@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); 
} 
+0

ありがとうございました。あなたは配列の場合に何をすべきか考えてくれますか? –

+0

私はhashcode()を実装する方法を意味しました。私はequals()の部分を得ました。 –

+0

もう一度わかりました。 –

1

あなたのクラス、Aオーバーequalshashcode方法に乗る必要があります。

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"); 
     } 
    } 
} 
関連する問題