2010-09-26 69 views
0

我正在用Java創建一個電話簿API。我的電話簿中的每個名稱都映射到一組電話號碼&地址。我想創建一個搜索功能,可以使用搜索參數作爲名稱或電話號碼本身來搜索電話簿中的條目。使用Map來實現高效的搜索過程-java,

我的做法一直是我的所有條目添加到:

Map <String, PhoneNumber> book = new HashMap <String,PhoneNumber>(); 
book.put("Name1",new PhoneNumber(new Integer(12345),new Integer(123456)); 
book.get("Name1"); 
// PhoneNumber is my class which can have different types of phone numbers 

我想這兩個是關鍵,也是由值名稱進行搜索。我不能這樣做,使用HashMap。有沒有更好的方法來實現高效的搜索過程?

+0

名稱是否是唯一的? – 2010-09-26 02:52:38

+1

不要將電話號碼錶示爲整數。你不能用一個整數表示前導零或#。 – 2010-09-26 08:19:56

+0

好趕上@thorbjorn。此外,電話號碼並不是真正的數字 - 在電話號碼上做數學是沒有意義的。因此,即使它看起來像一個,它也不是一個數字。所以我們在這裏看到的可能是一個通用的'lookup'類,和一個'電話簿'子類,它應用'該鍵必須是數字字符串'規則。 – 2010-09-26 12:21:41

回答

2

請勿爲您的電話簿使用地圖。它太有限了。而是創建一個PhoneBook類。該班級內有2個地圖,一個用於名稱搜索,另一個用於按號碼搜索。創建一個將Info添加到兩個地圖的add()例程。

public class PhoneBook { 
    private Map<String,Info> byNumber; 
    private Map<String,Info> byName; 
} 

其中「Info」是一個能夠告訴你關於該人的一切的類。

+0

上面假定名稱是唯一的。當然這是不現實的。如果他們不是,你可能會有:'私人地圖<字符串,列表> byName;'所以你得到所有這個名字的人的名單。 – 2010-09-26 03:01:25

+0

謝謝:)我會試試看! :) – JJunior 2010-09-26 04:20:03