Какая будет лучшая структура данных для хранения контактов телефонной книги, каждая из которых состоит из имени, фамилии и номера телефона. Пользователь должен иметь возможность выполнять поиск по каждому из полей. Были похожие вопросы, но ни один из ответов не был достаточно ясным.Структура данных для хранения данных телефонной книги
ответ
Создайте тип 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, несколько контактов могут иметь одно и то же имя, фамилию или номер телефона. Таким образом, поиск по имени (например), вернет набор контактов.
Создайте контактный объект, который хранит переменные, необходимые для каждого контакта. Используйте ArrayList для их хранения.
Без дополнительной информации о контакте на самом деле нет способа использовать HashTable, карту или график. Нет пары реальных значений для HashTable, если вы не хотите использовать комбинацию имени и фамилии, но вам нужно будет каким-то образом справиться с конфликтами (если у 2 человек есть то же самое имя.), Или вам нужно будет запретить имея 2 человека, имеющих одинаковое имя контакта (но зачем вы хотите это сделать?)
Если я назначаю уникальный идентификатор каждому контакту для использования в качестве ключа, как я могу хранить остальные данные? Какова была бы ценность? – Mitaryss
Вы должны использовать HashMap/HashTable/TreeMap с ключом, который является int или String или любым типом данных, который составляет уникальный идентификатор, а значение - объект Contact. Однако это означает, что вам нужно знать уникальный идентификатор для извлечения объекта с карты. – yitzih
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 типа Contact, и при поиске контакта сказать, Джон,
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;
}
Вид смутного вопрос, но что, черт возьми, может быть, это преследует мои послеобеденные сонли. Я предполагаю простое строковое представление номера телефона, но лучший объект данных для хранения всех возможных разновидностей телефонных номеров мира, а также метод интеллектуального поиска их (например, «(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. Эффективная структура данных для телефонной книги
- 3. Структура данных для эффективной подстроки в приложении телефонной книги
- 4. Структура данных Trie в Java - приложение для телефонной книги
- 5. Структура данных, которая наилучшим образом подходит для телефонной книги
- 6. Структура данных в стиле телефонной книги в Java?
- 7. структура данных для хранения синонимов
- 8. Структура данных для хранения диапазонов
- 9. Наилучшая структура данных для хранения
- 10. Структура данных для хранения динамических данных
- 11. Структура базы данных для хранения исторических данных
- 12. Структура данных для хранения огромного количества данных?
- 13. Структура данных для хранения больших наборов данных
- 14. Способы хранения телефонной книги. Разные ли они?
- 15. C++ структура данных для хранения миллионов int16
- 16. Назначение Python для телефонной книги
- 17. данных дизайн структура: интернет магазин книги
- 18. Как использовать gsmComm lib для импорта данных телефонной книги
- 19. Какая наилучшая структура данных для использования телефонной книги на мобильном устройстве
- 20. Структура данных для уникального хранения ссылок
- 21. Структура данных для хранения отладочных символов
- 22. Структура данных для хранения повторяющихся событий?
- 23. Хорошая структура данных для хранения списка
- 24. Структура данных для хранения уникальных элементов
- 25. Структура данных для хранения 2-х интервалов
- 26. Структура данных для хранения HashMap в друиде
- 27. Структура данных для хранения вложенных ящиков?
- 28. Структура данных для хранения узлов DFA
- 29. Структура данных для хранения разреженных матриц
- 30. Какая структура данных используется для хранения абзаца?
Я бы сказал, чтобы использовать хеш-таблицу, но это действительно то, с чем вам удобно. – Michael
Будут ли все номера телефонов в США или будут ли эти странные форматированные номера без США? –