2

我有List<Student> stud1 = new ArrayList<Student>();List<Student> stud2 = new ArrayList<Student>();

并且Student班级有姓名地址等成员。

我要做的是,我必须列出 stud1 中的学生(如果stud1 的学生名称等于stud2 的学生名称)。

如何做到这一点?

我想知道,有没有像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. 构造一个HashSet<String>包含所有Students名称的 astud2
  2. 对于每个Studentin stud1,检查他的名字是否在集合中,如果是,则将其添加到列表中以返回。
于 2012-05-18T12:16:51.017 回答
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

这里有一些算法给你:

  • 为 stud3 创建数组列表
  • 基于 stud1 从 int i = 0 到 i = (stud1.size() - 1) 的循环
    • 基于 stud2 从 int j = 0 到 j = (stud2.size() - 1) 的循环
      • 检查 stud1.get(i).getName() 是否等于 stud2.get(j).getName()
        • 检查 stud1.get(i) 是否已经在 stud3
          • 继续
        • 别的
          • 将 stud1.get(i) 添加到 stud3
于 2012-05-18T12:33:11.803 回答
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 回答