Java 如何在一个列表中聚合两个列表而不重复项?

Java 如何在一个列表中聚合两个列表而不重复项?,java,Java,我有两个具有相同对象的列表,其中具有不同的id属性值,但这些项具有其他相同的属性值,例如name属性。 我想要的是将两个列表合并到一个列表中,其中不包含具有相同propertyexpect id的重复项 我的对象示例: A{ id:int name:string } 我要实现它的方法: public List<A> join(List<A> list1, List<A> list2){ return a list with aggr

我有两个具有相同对象的列表,其中具有不同的id属性值,但这些项具有其他相同的属性值,例如name属性。 我想要的是将两个列表合并到一个列表中,其中不包含具有相同propertyexpect id的重复项

我的对象示例:

A{
    id:int
    name:string 
}
我要实现它的方法:

public List<A> join(List<A> list1, List<A> list2){
    return a list with aggregated items of list1 and list2(but not with duplicate items which have same property name value)
}

我的问题是,我可以使用什么样的最佳算法或模式来实现这一点?

最好的解决方案是覆盖

hashCode() 
equals()
当然,您需要实现两个对象相等的含义。不仅是属性,还有对象的其他属性

在此之后,您可以简单地使用以下内容:

set.retailAll(set1);

如果希望对象集合不包含重复项,则列表是错误的集合类型。你应该用一套。创建一个包含第一个列表中所有对象的新集合,然后添加第二个列表中的所有对象。重复项的消除是自动的。

是否提供了.equals方法,如果提供了,是否从相等性测试中排除了.id字段?最佳算法与合并排序相同。1对列表中的两个项目进行排序。2使用两个指针,例如i和j,它们指向两个列表的第一个元素。3使用i和j所指项目中较小的一个,并增加所选项目。4如果i和j所指的两个值相同,请选择您想要的值并同时递增。请使用此链接覆盖这两个方法:没错,但我的对象实际上并不相等。在我的项目的概念中,如果我的对象的名称属性相等,而不是所有属性相等,那么它们是相等的。当我的对象完全相等时,我可以使用Set。
set.retailAll(set1);