存儲電話簿聯繫人的最佳數據結構是什麼?每個數據結構都由名字,姓氏和電話號碼組成。用戶必須能夠通過每個字段進行搜索。 也有類似的問題,但答案都不夠清楚。用於存儲電話簿數據的數據結構
1
A
回答
2
創建一個POJO類型,它存儲名字,姓氏和電話號碼(如果需要可以使其變爲可變的)。
class PhoneBookEntry {
public final String firstName;
public final String lastName;
public final String phoneNumber;
public Entry(String firstName, String lastName, String phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.phoneNumber = phoneNumber;
}
//... equals + hashcode implementation
}
你可以這樣創建您的電話簿:
class PhoneBook {
private Map<String, Set<PhoneBookEntry>> firstNameMap;
private Map<String, Set<PhoneBookEntry>> lastNameMap;
private Map<String, Set<PhoneBookEntry>> phoneNumberMap;
public void add(PhoneBookEntry entry) {
Set<PhoneBookEntry> set
= firstNameMap.computeIfAbsent(entry.firstName, k -> new HashSet<>());
set.add(entry);
set = lastNameMap.computeIfAbsent(entry.lastName, k -> new HashSet<>());
set.add(entry);
set = phoneNumberMap.computeIfAbsent(entry.phoneNumber, k -> new HashSet<>());
set.add(entry);
}
public Set<PhoneBookEntry> getByFirstName(String firstName) {
return firstNameMap.get(firstName);
}
public Set<PhoneBookEntry> getByLastName(String lastName) {
return lastNameMap.get(lastName);
}
public Set<PhoneBookEntry> getByPhoneNumber(String phoneNumber) {
return phoneNumberMap.get(phoneNumber);
}
}
使用Map
允許的數量快速查找。
正如yitzih所說,多個聯繫人可以有相同的名字,姓氏或電話號碼。因此,按名字查找(例如)將返回一組聯繫人。
1
創建一個存儲每個聯繫人所需變量的聯繫人對象。使用ArrayList來存儲它們。
沒有關於聯繫人的更多信息,實際上沒有辦法使用HashTable,Map或Graph。 HashTable沒有真正的鍵值對,除非你想使用名字和姓氏的組合,但是你需要一些方法來處理衝突(如果2個人有完全相同的名字),或者你需要禁止有兩個人有相同的聯繫人名稱(但你爲什麼要這麼做?)
0
Class Contact{
String forename;
String Surname;
String phoneNo;
public Contact(fName, sName, pNo){
forename = fName;
Surname = sName;
phoneNo = pNo;
}
public String getForename(){}
public String getSurname(){}
public String getPhoneNo(){}
}
班上處理搜索, 聲明類型聯繫的ArrayList,以及搜索聯繫人時說約翰,一個模糊的問題
public Contact searchContact(String s){
for(int i = 0; i< ContactList.size(); i++){
if(ContactList.get(i).getForename().equals(s) ||
ContactList.get(i).getSurame().equals(s) ||
ContactList.get(i).getPhoneNo().equals(s)
){
return ContactList.get(i);
}
}
return null;
}
0
類,但到底是什麼,也許這會消除我午飯後的嗜睡症。我假設一個簡單的電話號碼字符串表示,但最好的數據對象來存儲世界電話號碼的所有可能的品種以及智能搜索它們的方法(例如,「(123)456-7891」與「1234567891」?)可能完全是它自己的問題。
這裏的PhoneBook類存儲所有的聯繫人。方法searchFirst(),searchLast()和searchPhoneNumber()都返回匹配聯繫人列表。
public class PhoneBook {
ArrayList<Contact> contacts;
public PhoneBook() {
contacts = new ArrayList<>();
}
public void addContact(Contact contact) {
contacts.add(contact);
}
public ArrayList<Contact> searchFirst(String first) {
ArrayList<Contact> foundContacts = new ArrayList<>();
for (Contact contact: contacts) {
if (contact.first.equals(first)) {
foundContacts.add(contact);
}
}
return foundContacts;
}
public ArrayList<Contact> searchLast(String last) {
ArrayList<Contact> foundContacts = new ArrayList<>();
for (Contact contact: contacts) {
if (contact.last.equals(last)) {
foundContacts.add(contact);
}
}
return foundContacts;
}
public ArrayList<Contact> searchPhoneNumber(String phoneNumber) {
ArrayList<Contact> foundContacts = new ArrayList<>();
for (Contact contact: contacts) {
if (contact.phoneNumber.equals(phoneNumber)) {
foundContacts.add(contact);
}
}
return foundContacts;
}
class Contact {
String first;
String last;
String phoneNumber;
public Contact(String first, String last, String phoneNumber) {
this.first = first;
this.last = last;
this.phoneNumber = phoneNumber;
}
}
}
相關問題
- 1. 數據結構在電話簿應用
- 2. Java中的電話簿式數據結構?
- 3. 用於存儲動態數據的數據結構
- 4. 爲電話簿設計一個數據結構
- 5. 存儲數據庫結構
- 6. 存儲樹數據結構
- 7. GAE數據存儲結構
- 8. 數據結構存儲
- 9. 用於存儲整數和整數範圍的數據結構?
- 10. 存儲特定結構化數據的最佳數據結構
- 11. C++數據結構,用於存儲浮點數的3維
- 12. 用於存儲和搜索比賽結果的數據結構
- 13. 使用GWT電話存儲/檢索本地存儲數據庫中的數據
- 14. 用於流數據的數據結構
- 15. 用於存儲用戶數據的JAVAFX體系結構
- 16. 電話簿數據庫幫助 - Python
- 17. 電話簿數據庫設計
- 18. 正確的MySQL結構存儲基於用戶的數據
- 19. 存儲IP地址的數據結構
- 20. 哪種類型的數據結構用於在iPhone上存儲此數據
- 21. 用於在C++中存儲超大型2D數據的數據結構
- 22. 用於以相對順序存儲數據的高效數據結構
- 23. 用於存儲單詞關聯的數據結構
- 24. 用於存儲個人技能的數據庫結構
- 25. 用於存儲XML解析值的數據結構
- 26. 用於圖形數據結構的最差情況存儲器
- 27. 用於存儲調試符號的數據結構
- 28. 用於存儲嵌套框的數據結構?
- 29. 用於唯一存儲鏈接的數據結構
- 30. 用於在遊戲中存儲實體的數據結構
我會說使用哈希表,但它真的是你舒服的。 – Michael
所有的電話號碼都是美國的還是會有那些奇怪格式的非美國號碼? –