[英]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
構造並切換循環( names
在contains
循環):
for (Person p : people) {
if (names.contains(p.getName()) {
return true;
}
}
在Java 8中,您可以使用Streams.anyMatch()
做到這一點:
返回true
,如果有任何Person
在people
的名字是names
:
people.stream().anyMatch(person -> names.contains(person.getName());
請注意,如果names
是Set<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.