首页 > 解决方案 > 比较java中两个大型自定义列表的对象

问题描述

我对如何比较两个列表有疑问?
这是我的情况。
我有两个ArrayListnameList<String>countList<Integer>)。两个列表都可以包含重复值,并且两个列表的大小也相同。
现在我必须将这两个列表合并为一个键值对。为此,我创建了一个 Person 类型的自定义列表:

public class Person {

    private String name;
    private Integer charCount;

    public Person(String name, Integer charCount) {
        this.name = name;
        this.charCount = charCount;
    }

    public String Name() {
        return name;
    }

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

    public Integer getCharCount() {
        return charCount;
    }

    public void setCharCount(Integer charCount) {
        this.charCount = charCount;
    }
}

List<Person> plist1 = new ArrayList<Person>();
for (int i=0; i < nameList.size(); i++) {
    plist1.add(new Person(nameList.get(i), countList.get(i)));
}

这给了我想要的正确值:
James,5
Charles,6
Lloyd,5
Charles,6

我已经为另一个数据创建了列表,与上面的要求完全相同,比如说plist2。现在我必须比较这两个列表。也就是说,我必须检查 plist1 中包含的名称是否plist2也包含在中。

标签: javalist

解决方案


您可以使用自定义比较器对两个列表进行排序(首先按名称字段,然后按 charCount 字段),然后同时遍历列表,检查两个列表中的对应对象是否相同。

这将为您提供两个列表在它们包含的对象集合中是否相等(对象可能不是相同的顺序)。例如:

plist1 --> James,5
           Charles,6
           Lloyd,5
           Charles,6

plist2 --> Lloyd,5
           Charles,6
           James,5
           Charles,6

根据上面提到的算法是相等的,但是在下面的场景中它们不会被认为是相等的,

plist1 --> James,7
           Charles,6
           Lloyd,5
           Charles,6

plist2 --> Lloyd,5
           Charles,6
           James,5
           Charles,6

推荐阅读