java对象列表比较

时间:2012-05-18 12:10:07

标签: java comparator compareto

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

Student班级的成员有名称地址

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

如何实现这一目标?

我想知道,是否有像 ListUtil 这样的 java库来解决这个问题?

6 个答案:

答案 0 :(得分:3)

只需遍历它们并检查并继续添加结果列表 如果你想优化它,那么

创建地图

Map<String, List<Student>> dictionaryMapOfStudents;

然后选择HashMap实施,并仅查找名称匹配的学生

例如

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

所以现在你不会搜索完整列表,缩小搜索范围

答案 1 :(得分: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 );
}

}

答案 2 :(得分:2)

你可以这样做:

  1. HashSet<String>
  2. 中构建一个Student,其中包含stud2的所有名称
  3. 对于Student中的每个stud1,检查他的名字是否在集合中,如果是,请将其添加到列表中以便返回。

答案 3 :(得分:0)

如果您只需要比较可以迭代的学生的名字并比较两个列表中的名称,有很多方法可以比较Collection内的元素,但我认为实现Comparable并创建compare_to方法更优雅你的学生班。

此处有更多信息:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

答案 4 :(得分: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

答案 5 :(得分: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);
            }
        }
    }
}