2014-02-28 98 views
0

我正在創建一個程序,允許用戶輸入要搜索的聯繫人的名稱。如果找到聯繫人,則會顯示聯繫人的其他信息(電話號碼和電子郵件)。(Java)搜索字符串的ArrayList

我的ArrayList是這樣的:

ArrayList<Contact> contacts = new ArrayList<Contact>(); 

contacts.add(new Contact("Patrick McGee", "334-555-8860", "[email protected]")); 
contacts.add(new Contact("John Appleseed", "142-555-6740", "[email protected]")); 
contacts.add(new Contact("Matt Jordan", "213-555-2323", "[email protected]")); 
contacts.add(new Contact("Kanye East", "255-434-9909", "[email protected]")); 
contacts.add(new Contact("Derrick Flower", "144-555-1111", "[email protected]")); 

我有變量:字符串名稱,字符串NUM和String電子郵件。
同樣,用戶被要求輸入名稱(數組列表的第一個字符串)。 如果找到名字,則會打印聯繫人(包含所有信息)。我曾嘗試在集合中使用BinarySearch,但那給了我非常混淆的錯誤。如果需要更多信息,請隨時詢問。 有沒有像這樣搜索的方法?謝謝。

+0

你有沒有覆蓋equals和hascode方法在Contact類?它是實現可比較還是比較器接口? – Naren

+0

我試圖使用執行比較器,但有很多錯誤。你能告訴我一個在這種情況下如何使用比較器的例子嗎? – pmcg521

回答

2

不,不存在這樣做的方法。你必須自己做,因爲在這裏你只是在檢查一個屬性。

for(Contact contact : contacts) { 
    if(contact.getName().equals(nameToSearchFor)) { 
     // return the contact, print it or whatever you need 
    } 
} 

有一些像Comparable和等於API用於這種類型的東西,但只考慮該名稱的實現會破壞他們的合同。

這將是可能定義一個比較,只有看着的名稱和使用的binarySearch但這需要:

  • 聯繫來實現可比否則
  • 列表進行排序

說實話,在這種情況下做這些事情並沒有太多的收穫。