Java:对ArrayList进行脏检查?

sTg*_*sTg 1 java arraylist dirtyread java-8

如何ArrayList在Java中执行脏检查?

我有一个对象

Animal
{
    String animalName;
    String animalType;
    String animalPlace
}
Run Code Online (Sandbox Code Playgroud)

我有两个清单:

List<Animal> animalList1 = new ArrayList<Animal>();
List<Animal> animalList2 = new ArrayList<Animal>();
Run Code Online (Sandbox Code Playgroud)

在第一个列表中,我有值:

[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Zimbabwe]
Run Code Online (Sandbox Code Playgroud)

在第二个列表中,我有以下值:

[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Norway]
Run Code Online (Sandbox Code Playgroud)

在第二个清单中,animalPlace索引2的元素已从津巴布韦变为挪威.如何比较两个列表值和已更改的值将该对象放在单独的列表中?

List<Animal> animalList3 = new ArrayList<Animal>();

[0] [Goat,Herbivorous,Norway]
Run Code Online (Sandbox Code Playgroud)

通过使用for循环比较列表,我知道传统的方法:

for (int i = 0; i < list1.size(); i++) 
{
  for (int j = i+1; j < list2.size(); j++) 
  {
    // compare list1 and list2 values
  }
}
Run Code Online (Sandbox Code Playgroud)

有更快更好的方式吗?

AJN*_*eld 5

列表#的removeAll()方法是你的朋友.

实现equals()hashCode()为动物,然后:

List<Animal> animalList3 = new ArrayList<Animal>(animalList2);
animalList3.removeAll(animalList1);
Run Code Online (Sandbox Code Playgroud)