簡體   English   中英

檢查兩個不同的ArrayList是否相等

[英]Check if two different ArrayLists are Equal

我有一個String類型的數組列表和一個Person類型的數組列表。 其中Person是一個僅包含持有名稱的字符串的對象。

ArrayList<Person> people = new ArrayList<Person>();
ArrayList<String> names = new ArrayList<String>();

假設我這樣做

names.add("Josh");
people.add(new Person("Josh");

假設創建一個新的Person Object會將名稱設置為“ Josh”,並假設Person類具有該名稱的get方法。

有沒有一種方法可以檢查名稱數組列表是否包含名為Josh的人員。

我唯一能想到的就是

for(int i = 0; i < names.size(); i++){
    if(names.get(i).equals(people.get(i).getName)){
        return true;
    } // end if     
} // end for

現在,如果“人員數組列表”和名稱“數組列表”包含多個元素,如何檢查名稱數組列表中的字符串是否包含“人員”之一的名稱? 我會用這個嗎?

 for(int i = 0; i < names.size(); i++){
    for(int j = 0; j < people.size(); j++){
        if(names.get(i).equals(people.get(j).getName)){
            return true;
        } // end if
    }  // end nested for    
 } // end for

還是因為數組列表包含不同的對象,這甚至不可能嗎?

是的,您可以按照建議的方式實施它。 為了更簡潔,您還可以使用for-each構造並切換循環( namescontains循環):

for (Person p : people) {
    if (names.contains(p.getName()) {
       return true;
    }
 }

在Java 8中,您可以使用Streams.anyMatch()做到這一點:

返回true ,如果有任何Personpeople的名字是names

people.stream().anyMatch(person -> names.contains(person.getName());

請注意,如果namesSet<String>而不是List<String> ,這會更快。

首先檢查列表長度是否相同。
然后檢查一個元素中的每個元素是否包含在另一個元素中。 當然,這假定名稱在列表中是唯一的。

if (people.size () != names.size ()){
    return false;
}
for(Person p : people) {
    if(!names.contains(p.getName())){
         return false;
    }
}
return true;

可能的解決方案:

解決方案1 :最簡單的方法

public boolean check(List<Person> people, List<String> names) {
    for(Person person : people) {
        if (names.contains(p.getName()) {
            return true;
        }
    }
}

注意:如果列表“名稱”中有很多條目,這將導致性能下降,因為這可能是NxN比較(在最壞的情況下)


解決方案2 :對“名稱”使用一組(稍好一點的方法)

public boolean check(List<Person> people, Set<String> names) {
    for(Person person : people) {
        if (names.contains(p.getName()) {
            return true;
        }
    }
}


解決方案3 :使用地圖

Map<String, Person> personMap = new HashMap<>();

然后用

personMap.containsKey("John");

如果您使兩種類型的對象都具有一個公共基類,並且該基類實現了“可比較”接口,則可以大致執行此操作。

然后,您可以在每個子類中定義不同的compareTo方法以獲得所需的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM