2017-06-04 4 views
-2

Javaで2つのハッシュセットを比較するにはどうすればよいですか?最初のハッシュセットは以下のようになります。Javaで2つのハッシュセットを比較するには?

static Set<String> nounPhrases = new HashSet<>(); 

上記のハッシュセットには、このような要素が含まれています。

名詞解析のリスト:[Javaは、JSP、ブック]

第二のハッシュは、名詞解析の

static Set<String> nounPhrases2 = new HashSet<>(); 

リスト設定:[ウェブ、PHP、Java(登録商標)、書籍]

注 - 両方のセットに等しい名詞があるかどうかを確認する必要があります。類似した名詞を持っている場合は別の仕事をする必要があります

+1

あなたは何の結果:あなたは、両方の「等しい」ことがnullの2つの設定変数、その後、使用したい場合は

set1.equals(set2) 

Set#equals()は、あなたが期待する方法でセットを比較します欲しいです? – Sweeper

+4

「比較」を定義します。交差点を探していますか?または、両方のセットがまったく同じ要素を持つようにしますか?また、これまでに何を試しましたか? – Sudicode

+1

'seta.equals(setb)'の何が問題なのですか? – laune

答えて

0
public class SetUtils { 

    public static boolean equals(Set<?> set1, Set<?> set2){ 

     if(set1 == null || set2 ==null){ 
      return false; 
     } 

     if(set1.size()!=set2.size()){ 
      return false; 
     } 

     return set1.containsAll(set2); 

    } 
} 
+1

それは既に存在するので、基本的にSet.equals()と同じです。 – Durandal

0

このような意味ですか?

public static void main(String[] args) { 

    final Set<String> nounPhrases = new HashSet<>(); 
    nounPhrases.add("java"); 
    nounPhrases.add("jsp"); 
    nounPhrases.add("book"); 

    final Set<String> nounPhrases2 = new HashSet<>(); 
    nounPhrases2.add("web"); 
    nounPhrases2.add("php"); 
    nounPhrases2.add("java"); 
    nounPhrases2.add("book"); 

    // Checking for every element in first set 
    for (final String element : nounPhrases) { 

     // if second set has the current element 
     if (nounPhrases2.contains(element)) { 
      System.out.println("They have " + element); 
     } 
    } 
} 

マイ出力:

They have java 
They have book 

編集:あなたは、両方のセットに共通の要素を入手するには、値を格納し、それらを返すようにしたい場合、私は、正しく理解していれば 、あなたのコメントに基づいて:

public static void main(String[] args) { 

    final Set<String> nounPhrases = new HashSet<>(); 
    nounPhrases.add("java"); 
    nounPhrases.add("jsp"); 
    nounPhrases.add("book"); 

    final Set<String> nounPhrases2 = new HashSet<>(); 
    nounPhrases2.add("web"); 
    nounPhrases2.add("php"); 
    nounPhrases2.add("java"); 
    nounPhrases2.add("book"); 

    System.out.println(getCommon(nounPhrases, nounPhrases2)); 
} 

public final static Set<String> getCommon(Set<String> setA, Set<String> setB) { 

    final Set<String> result = new HashSet<>(); 
    for (final String element : setA) { 
     if (setB.contains(element)) { 
      result.add(element); 
     } 
    } 
    return result; 
} 

あなたは、文字列以外の要素のための方法を動作させるためにジェネリック医薬品を使用することができます。

public final static <T> Set<T> getCommon(Set<T> setA, Set<T> setB) { 

    final Set<T> result = new HashSet<>(); 
    for (final T element : setA) { 
     if (setB.contains(element)) { 
      result.add(element); 
     } 
    } 
    return result; 
} 

パフォーマンスが重要な場合は、最初にサイズを確認し、小さいセットの要素に対してのみ繰り返します。 1つの要素で1つのセットがあり、100で1つのセットがある場合は、小さなものから順に1つの反復で得られますが、大きいもので始めると100のチェックが残ります。

+0

こんにちは出力以下。名詞パースの一覧:[java、jsp、book] 名詞パースのリスト:[Java、developmet、web、JSP、book] 彼らは本を持っています – user8048032

+0

私はあなたのことを理解していません。質問。どのようなアウトプットを手に入れますか?私のコードでは、bookとjavaの両方が出力されます。 – Dennux

+0

これは私のコードですhttps://paste.ofcode.org/X7NVBEdhBA2ux4KGjPfmTv – user8048032

0

uは、共通の要素を検索したい場合はuは単にセットがして、Java 8

long count = nounPhrases.stream().filter(tempstring -> { 
      return nounPhrases2.stream().anyMatch(tempstring2 -> { 
       return tempstring.equals(tempstring2); 
      }); 
     }).count(); 
     if (count > 0) 
      System.out.println("has common elements-"+count); 
     else 
      System.out.println("not common"); 
+0

count()をフィルタリングして使用する代わりに、anyMatch()を使用するだけで済みます。それは最初の試合で止まるので、より速く(そしてより明確に)なります。 –

+0

updated @JB Nizet – UchihaObito

+0

あなたはそこにcount()を残しました。 anyMatch()はブール値を返します。 –

0

を使用して、共通の要素を持っているどのように多くの検索したい場合は、その後、代わりにカウントコレクト(Collectors.toListを())を使用するにはJavaの使用apache.commons.collectionsパッケージ実装可能

package com.StackoverFlow; 

import java.util.Collection; 
import java.util.HashSet; 
import java.util.Set; 
import org.apache.commons.collections.CollectionUtils; 
public class MainClass { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 


     Set hs_1 = new HashSet(); 
     hs_1.add("A"); 
     hs_1.add("B"); 
     hs_1.add("C"); 
     hs_1.add("D"); 

     Set hs_2 = new HashSet(); 
     hs_2.add("A"); 
     hs_2.add("B"); 
     hs_2.add("C"); 
     hs_2.add("D"); 

     Collection result = CollectionUtils.subtract(hs_1, hs_2); 
     System.out.println(result); 
     if(result.isEmpty()){ 
      System.out.println("perform Task-->>Value maches "); 

     }else{ 
      System.out.println("perform Task-->>Value not maches "); 
     } 

    } 

} 
0

これは既に発明されたホイールです。

Objects.equals(set1, set2) 
関連する問題