簡體   English   中英

在ArrayList中搜索特定對象

[英]Search an ArrayList for a particular Object

我有一個名為Person的課程。 它具有以下attributes ; 它有2個屬性, IDTelephone 1個人可以擁有多個電話,因此您可能會看到下面有多個ID的人。

public ArrayList<Person> all(){

    p = new ArrayList<Person>();
    p.add(new Person(1,266763));
    p.add(new Person(1, 358643));
    p.add(new Person(2, 4667763));

    return p; 
}

還有另一個名為PersonDB的類。 它將有一個名為findPersonWithTheTelephoneNumber(int telephone)

public void findPersonWithTheTelephoneNumber(int telephone) {
   Person pp = new Person();
   ArrayList<Person> personList = pp.all();

   // Now i want to find the Person object that will match the telephone number of these list of personList.


}

personList,有3-4個Person對象。 我需要搜索PersonArrayList並找到與Person對象匹配的對象。 我怎么能這樣做?

注意:我試過personList.contains() 但這不起作用。

//...
Person foundPerson = null;
for (Person p : personList){
    if (p.getTelephone() == telephone){
         foundPerson = p; //or simply return it from there
         break;
    }
}

要實現hashCodeequals您可以觀察本教程

首先,為什么沒有List<Integer>來存儲特定人的所有telephoneNumbers 這樣,您就不必為同一personId每個telephoneNumber創建一個單獨的Person實例,這根本沒有意義。

您可以將Person類的屬性更改為: -

private int id;
private List<Integer> telephoneNumbers = new ArrayList<Integer>();

然后有一個Person列表,就像你一樣。

要查找具有特定telephoneNumber的Person ,您需要遍歷List<Person>

for (Person person: personList) {
    if (person.getTelephoneNumbers().contains(telephone)) {
        return person;
    }
}

我試過personList.contains()

確保為Person類重寫Object.equals()Object.hashCode() 但是你必須對電話號碼進行平等檢查,假設電話號碼是唯一的。 這不是解決方案,而是解決方法。 使用bellum的答案。 將其標記為正確答案。

您需要迭代數組,逐個檢查人員的電話號碼,當您到達那個時,您需要將其分配給變量。

使用for循環遍歷列表。 在循環體中,檢查列表中人員的電話號碼是否是您要查找的電話號碼。 如果是,則返回此人。

請參閱Oracle Java教程中for語句

許多解決方案通過電話號碼將兩個人定義為相同,但如果將兩個住在同一房子和/或具有相同電話號碼的人添加到列表中會怎樣? 哪一個是正確的?

在急於尋找這個人之前,你必須確定一種方法來確定兩個人是否確實是平等的而沒有模棱兩可的結果。 除非您通過使其獨一無二來限制基於該電話號碼的人員創建(您在問題中沒有說明這一點,所以我認為沒有這樣的限制),搜索的結果是不確定的。

您正在使用ArrayList因此您無法保證插入順序的結果。

我建議你將相等測試基於一個人的ID而不是手機。 為了防止修改id ,只需為它定義一個getter,並且根本不定義setId方法。 然后,您可以基於id重新定義equals (如果您願意,還可以重新定義hashcode )。

暫無
暫無

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

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