2016-03-20 4 views
1

ハッシュテーブルに他のハッシュテーブルに存在するすべてのキーと値のペアが含まれているかどうかを調べる組み込みのJavaメソッドはありますか?例えばjavaハッシュテーブルに別のハッシュテーブルのキーと値のペアが含まれているかどうかを確認する方法

h1={{0,1},{1,4},{2,5},{3,6}} 
h2={{0,1},{2,5}} 

この場合には、h1h2からキーと値のペアが含まれていることは事実です。ここで

+3

一致するキーがあるかどうか、またはキーと値が正確に一致するかどうかを知りたいですか?ちなみに、HashMapはHashTable(通常はHashTable)ではなくHashMapを使用してください。 – pczeus

+0

キーと値が正確に一致するかどうかを知る必要があります。この場合、JavaのHashTable.containsメソッドは役に立ちません。また、なぜ私はHashTable上でHashMapを使用すべきですか? – tinyhamster

+1

[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html)から:「スレッドセーフな実装が必要ない場合は、 'HashTable'の代わりに' HashMap'を使用します。 – bcsb1001

答えて

2

することができますHashtableには方法はありませんこれを直接チェックしますが、各Hashtableに対してentrySet()メソッドを使用して、すべてのキーと値のペアのSetを取得することができます。このセットは、指定されたコレクションのすべての要素が含まれている場合、それ

はtrueを返しますので、

次に、あなただけの、それらの一方が他方のサブセットであるかどうかを確認するためにcontainsAll()を使用することができます。 指定されたコレクションもセットである場合、このメソッドはこのセットのサブセットである場合はtrueを返します。

// h1={{0,1},{1,4},{2,5},{3,6}} 
    Hashtable<Integer, Integer> h1 = new Hashtable<>(); 
    h1.put(0, 1); 
    h1.put(1, 4); 
    h1.put(2, 5); 
    h1.put(3, 6); 

// h2={{0,1},{2,5}} 
    Hashtable<Integer, Integer> h2 = new Hashtable<>(); 
    h2.put(0, 1); 
    h2.put(2, 5); 

    Set<Entry<Integer, Integer>> e1 = h1.entrySet(); 
    Set<Entry<Integer, Integer>> e2 = h2.entrySet(); 

    System.out.println(e2.containsAll(e1)); // false 
    System.out.println(e1.containsAll(e2)); // true 
+0

ありがとう、これは私が必要としていたものです。 – tinyhamster

0

は、キーまたはキーと2つの異なるマップの値と一致する方法を実証するために、少量のサンプルプログラムです:

public class HashMapMatch { 

     public boolean hasMatchingKey(String key, Map m1, Map m2){ 
      return m1.containsKey(key) && m2.containsKey(key); 
     } 

     public boolean hasMatchingKeyAndValue(String key, Map m1, Map m2){ 
      if(hasMatchingKey(key, m1, m2)){ 
       return m1.get(key).equals(m2.get(key)); 
      } 
      return false; 
     } 

     public static void main(String[] args) { 
      HashMapMatch matcher = new HashMapMatch(); 
      Map<String, Integer> map1 = new HashMap<>(); 
      map1.put("One",1); 
      map1.put("Two",22); 
      map1.put("Three",3); 

      Map<String, Integer> map2 = new HashMap<>(); 
      map2.put("One",1); 
      map2.put("Two",2); 
      map2.put("Four",4); 

      System.out.println("Has matching key? :" + matcher.hasMatchingKey("One", map1, map2)); 
      System.out.println("Has matching key? :" + matcher.hasMatchingKey("Two", map1, map2)); 
      System.out.println("Has matching key? :" + matcher.hasMatchingKey("Three", map1, map2)); 

      System.out.println("Has matching key value: :" + matcher.hasMatchingKeyAndValue("One", map1,map2)); 
      System.out.println("Has matching key value: :" + matcher.hasMatchingKeyAndValue("Two", map1,map2)); 

     } 
    } 

は出力を生成します。

Has matching key? :true 
Has matching key? :true 
Has matching key? :false 
Has matching key value: :true 
Has matching key value: :false 
+0

生の型。 – bcsb1001

+0

どのような生のタイプを参照していますか? – pczeus

+0

'Map'は' HashMapMatch'の2つのメソッドで生の型として使われます。 – bcsb1001

関連する問題