1. ホーム
  2. java

[解決済み] Java 二つのリストを比較する

2022-03-03 18:03:34

質問

2つのリストがあります(Javaのリストではなく、2つの列と言えます)。

例えば

**List 1**            **Lists 2**
  milan                 hafil
  dingo                 iga
  iga                   dingo
  elpha                 binga
  hafil                 mike
  meat                  dingo
  milan
  elpha
  meat
  iga                   
  neeta.peeta    

同じ要素がいくつあるかを返すメソッドが欲しいです。この例では 3 で、両方のリストの似たような値と異なる値を返してくれるはずです。

ハッシュマップを使うべきですか?もしそうなら、どんな方法で結果を得ることができますか?

よろしくお願いします。

P.S: 学校の課題ではありません :) だから、あなたが私を導くだけであれば、それは十分です。

どのように解決するのですか?

EDIT

ここでは2つのバージョンを紹介します。ひとつは ArrayList と、もう一つは HashSet

それらを比較し、あなたの 自分の を作成し、必要なものを得ることができます。

をカバーするのに十分なはずです。

追伸:これは学校の課題ではありません :) だから、あなたが私を導くだけで十分です。

の部分です。

最初の回答の続きです。

を使用することができます。 java.util.Collection および java.util.ArrayList を使用します。

は、その リテインオール メソッドは次のような処理を行います。

指定されたコレクションに含まれる要素のみをこのコレクションに保持します。

は、このサンプルをご覧ください。

import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;

public class Repeated {
    public static void main( String  [] args ) {
        Collection listOne = new ArrayList(Arrays.asList("milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"));
        Collection listTwo = new ArrayList(Arrays.asList("hafil", "iga", "binga", "mike", "dingo"));

        listOne.retainAll( listTwo );
        System.out.println( listOne );
    }
}

EDIT

2番目の部分(似たような値)については、以下のようにします。 リムーブオール メソッドを使用します。

指定されたコレクションに含まれる、このコレクションのすべての要素を削除します。

この2番目のバージョンは、類似した値も与え、繰り返された値も処理します(破棄する)。

今回は Collection は、もしかしたら Set の代わりに List ( 違いは、Set が繰り返し値を許さないことです )

import java.util.Collection;
import java.util.HashSet;
import java.util.Arrays;

class Repeated {
      public static void main( String  [] args ) {

          Collection<String> listOne = Arrays.asList("milan","iga",
                                                    "dingo","iga",
                                                    "elpha","iga",
                                                    "hafil","iga",
                                                    "meat","iga", 
                                                    "neeta.peeta","iga");

          Collection<String> listTwo = Arrays.asList("hafil",
                                                     "iga",
                                                     "binga", 
                                                     "mike", 
                                                     "dingo","dingo","dingo");

          Collection<String> similar = new HashSet<String>( listOne );
          Collection<String> different = new HashSet<String>();
          different.addAll( listOne );
          different.addAll( listTwo );

          similar.retainAll( listTwo );
          different.removeAll( similar );

          System.out.printf("One:%s%nTwo:%s%nSimilar:%s%nDifferent:%s%n", listOne, listTwo, similar, different);
      }
}

出力します。

$ java Repeated
One:[milan, iga, dingo, iga, elpha, iga, hafil, iga, meat, iga, neeta.peeta, iga]

Two:[hafil, iga, binga, mike, dingo, dingo, dingo]

Similar:[dingo, iga, hafil]

Different:[mike, binga, milan, meat, elpha, neeta.peeta]

もしこれがあなたの必要とするものを正確に行わないとしても、良いスタートを与えるので、ここから対処することができます。

読者に質問です。繰り返されるすべての値をどのように含めるのでしょうか?