Java removeAll()和对象

Java removeAll()和对象,java,Java,我有两个ArrayList,其中包含我的类报表对象的对象。 报表对象有两个字段,但最重要的是Tag(String)和Attr(String) 在程序执行期间,两个ArrayList将填充该对象。这些ArrayList表示ReportObjects的旧集合和新集合 我想知道哪些对象被添加到新的arrayList中,哪些对象被从旧的arrayList中删除 ReportObject obj1 = new ReportObject("Tag", "Attr", "XPath", "Parent", n

我有两个ArrayList,其中包含我的类报表对象的对象。 报表对象有两个字段,但最重要的是Tag(String)和Attr(String)

在程序执行期间,两个ArrayList将填充该对象。这些ArrayList表示ReportObjects的旧集合和新集合

我想知道哪些对象被添加到新的arrayList中,哪些对象被从旧的arrayList中删除

ReportObject obj1 = new ReportObject("Tag", "Attr", "XPath", "Parent", null);
    ReportObject obj2 = new ReportObject("Tag2", "Attr", "XPath", "Parent", null);
    ReportObject obj3 = new ReportObject("Tag", "Attr", "XPath", "Parent", null);
    ArrayList<ReportObject> newList = new ArrayList<>();
    ArrayList<ReportObject> oldList = new ArrayList<>();
    ArrayList<ReportObject> added = new ArrayList<>();
    ArrayList<ReportObject> removed = new ArrayList<>();
    newList.add(obj1);
    newList.add(obj2);
    oldList.add(obj3);
    added.addAll(newList);
    added.removeAll(oldList);
reportobjectobj1=新的ReportObject(“标记”、“属性”、“XPath”、“父对象”、null);
reportobjectobj2=新的ReportObject(“Tag2”、“Attr”、“XPath”、“Parent”、null);
reportobjectobj3=新的ReportObject(“Tag”、“Attr”、“XPath”、“Parent”、null);
ArrayList newList=新的ArrayList();
ArrayList oldList=新ArrayList();
添加的ArrayList=新的ArrayList();
ArrayList removed=新的ArrayList();
newList.add(obj1);
newList.add(obj2);
新增(obj3);
added.addAll(newList);
添加.删除所有(旧列表);
问题是我在添加的ArrayList中仍然有两个元素。因为obj1和obj3是不同的对象? 当我在检查对象是否具有相同的字段值的同时执行两个循环并对其进行迭代时,仍然会得到相同的结果


因此,在添加的arrayList中,我应该只有obj2,而在删除的arrayList中,应该是空的。

A
String
是Java中的
对象。这会奏效的。Java
Collections
大量使用
equals
来确定集合中是否存在对象。如果不重写equals,这将仅删除两个集合中存在的对象。不过,这通常是预期的结果。

我想你在制作对象的类上有一个ID,然后像这样:

for(ReportObject obj : xmlModel_New)
{
int i = 0;
    for(ReportObject obj2 : xmlModel_Old){

    if(obj.get(i).getId() != obj2.get(i).getId())
    {

        addedTags.add(obj);
    }
    i++;
    }
}

类似于此。

您需要重写
ReportObject
类中的
equals(Object obj)
hashCode()
方法。默认使用的是内存位置,我怀疑您是如何尝试比较它们的。什么使他们平等?一个属性还是所有属性?你必须定义它。你的例子会变成

    if(!obj.equals(obj2))
    {
        addedTags.add(obj);
    }
我认为这个问题被否决了,可能是因为它以前已经被回答过了,也可能是因为不清楚你在问什么。发布更多细节,我会尽力帮助你

此外,请查看以下链接:


字符串是一个对象。是的,我知道,但我在比较对象。我有对象,但没有字符串对象。