就我而言,我有两个哈希集,一组包含 friend 的姓名和号码,另一组
包含现有 friend 的姓名和电话号码,此数据从数据库检索并存储到集中
如何比较和删除拖曳集和存储在新集中的交集数据中的重复项?
我需要在google中使用的代码,我在比较器中看到了比较器,它们只使用了一组,但就我而言,我正在检查两套,对不起我的英语不好

最佳答案

假设我们有set1和set2我们可以执行以下操作

    Set set3 = new HashSet(set1);
    set3.retainAll(set2);
    set1.removeAll(set3);
    set2.removeAll(set3);

你的情况是
public class Friend {
    String name;
    String number;

    public Friend(String name, String number) {
        this.name = name;
        this.number = number;
    }

    @Override
    public int hashCode() {
        return name.hashCode() + 31 * number.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Friend)) {
            return false;
        }
        Friend other = (Friend)obj;
        return other.number.equals(number) && other.name.equals(name);
    }

    @Override
    public String toString() {
        return name + "-" + number;
    }
}

public static void main(String[] args) throws Exception {
    Set<Friend> set1 = new HashSet<Friend>();
    set1.add(new Friend("Karthik", "111"));
    set1.add(new Friend("Mani", "222"));
    set1.add(new Friend("Karthik", "111"));
    set1.add(new Friend("Mani", "444"));
    set1.add(new Friend("Karthik", "111"));

    Set<Friend> set2 = new HashSet<Friend>();
    set2.add(new Friend("Karthik", "111"));
    set2.add(new Friend("Raju", "3333"));

    Set<Friend> set3 = new HashSet<Friend>(set1);
    set3.retainAll(set2);
    set1.removeAll(set3);
    set2.removeAll(set3);

    System.out.println(set1);
    System.out.println(set2);
}

输出
[Mani-444, Mani-222]
[Raju-3333]

07-24 18:56
查看更多