2

私が持っているList<Student> stud1 = new ArrayList<Student>();List<Student> stud2 = new ArrayList<Student>();

そして、クラスには名前住所Studentなどのメンバーがいます。

私がしなければならないのは、stud1からStudentをリストする必要があることです( stud1のStudent名がstud2のStudent名と等しい場合)。

これを達成する方法は?

知りたいのですが、この問題を解決するためのListUtilのような既存のJavaライブラリはありますか?

4

6 に答える 6

3

それらの両方を反復してチェックし、結果のリストに追加し続けるだけです。最適化したい場合は、

マップを作成する

Map<String, List<Student>> dictionaryMapOfStudents;

次に、実装を選択HashMapし、名前が何らかの形で一致する学生のみを探します。

例えば

A Asdahd, Aasldfalf, Aero
B Baksd, Bajsr, Biro

これで、完全なリストを検索するのではなく、検索を絞り込みました

于 2012-05-18T12:12:59.613 に答える
3

この例はあなたを助けるかもしれません

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

}

于 2012-05-18T12:14:23.810 に答える
2

できるよ:

  1. のs のHashSet<String>すべての名前を含むaを構築しますStudentstud2
  2. のそれぞれについて、彼の名前がセットに含まれているかどうかを確認Studentstud1、含まれている場合はリストに追加して返します。
于 2012-05-18T12:16:51.017 に答える
0

ルックアップ名の照合にはHashSetを使用できます。

class Student {
    private String name;
    private String address;

    public Student(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

public class Program {
    public static void main(String[] args) {
        List<Student> s1 = new ArrayList<Student>();
        List<Student> s2 = new ArrayList<Student>();

        // generate data
        for (int i = 0; i < 5; i++) {
            Student s = new Student("Student" + i, "");
            s1.add(s);
        }
        for (int i = 0; i < 10; i++) {
            Student s = new Student("Student" + i, "");
            s2.add(s);
        }

        // create a lookup HashSet
        Set<String> nameSet = new HashSet<String>();
        for (Student s : s2) {
            nameSet.add(s.getName());
        }

        List<Student> result = new ArrayList<Student>();
        // perform lookup
        for (Student s : s1) {
            if (nameSet.contains(s.getName())) {
                // add the matching student to the result list
                result.add(s);
            }
        }
    }
}
于 2012-05-18T12:57:57.990 に答える
0

コレクション内の要素を比較する方法はたくさんありますが、学生の名前を比較するだけでよい場合は、両方のリストで反復して名前を比較できますが、 Comparable を実装して、 Student クラスに compare_to メソッドを作成する方がエレガントだと思います.

詳細はこちら: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

于 2012-05-18T12:16:05.773 に答える
0

ここにいくつかのアルゴリズムがあります:

  • スタッド 3 のアレイ リストの作成
  • int i = 0 から i = (stud1.size() - 1) までのスタッド 1 に基づくループ
    • int j = 0 から j = (stud2.size() - 1) までの stud2 に基づくループ
      • スタッド 1.get(i).getName() がスタッド 2.get(j).getName() と等しいかどうかを確認します
        • スタッド 1.get(i) が既にスタッド 3 にあるかどうかを確認します
          • 継続する
        • そうしないと
          • スタッド 1.get(i) をスタッド 3 に追加します。
于 2012-05-18T12:33:11.803 に答える