2013-05-09 1 views
0

Я пытаюсь добавить к коллекции следующие парыКакая коллекция подходит для номера телефона + пары имен в Java?

698xxxxxxx - Persona

698xxxxxxx - personB

699xxxxxxx - Persona

699xxxxxxx - personB

I пройдите много файлов и попытайтесь добавить в коллекцию пары, которые я нахожу там , Я хочу иметь таблицу, в которой будут отображаться все числа и то, с кем они были связаны, без дублирования PAIRS. например

1-персоны нормально

1-personB нормально

2-персоны нормально

3-personB нормально

3-personB НЕ КИ, как его там уже

Я пробовал использовать Multimap, но я не уверен, что его правильный выбор. Каким бы ни было решение, пожалуйста, покажите мне, как итеративно использовать его значения, чтобы я мог использовать пары. Извините за требовательные сообщения, но я новый с Java, и я нахожу Lil трудно понять API.

Заранее спасибо

+0

Consuder uing в HashMap , но подумайте, каков ваш уникальный ключ, тел + человек или тел. – AlexWien

ответ

0

Вам может понадобиться HashMap с ключом, как имя человека и ценность как HashSet чисел. Hashset не допускает дубликатов, поэтому дублирующиеся номера не будут храниться в этом. Вот код:

HashMap<String,HashSet> Records; 
2

Есть три очевидные альтернативы, в зависимости от того, что вам нужно.

  • Если может быть только один человек, для каждого номера телефона, то простой Map<PhoneNo, Name>.

  • Если данный номер телефона может быть связан с несколькими людьми, то либо Map<Phone,Set<Name>>, либо класс с несколькими картами.

  • Если вы также хотите узнать номер или номера телефонов для каждого человека, вам нужны две карты или две мульти-карты ... или двунаправленная карта.

Существует дополнительный выбор, который вам необходимо сделать: хеш-таблица против древовидных организаций. Хэш-таблица даст вам O(1) lookup/insert/remove (при условии, что функция хэша хороша). Реализация на основе дерева дает O(logN) операций ...но также позволяет перебирать записи (или значения) в порядке нажатия.

Хотя стандартные библиотеки классов Java не предоставляют карты с несколькими картами или двунаправленные карты, их можно легко реализовать, объединив простые классы классов.

0

В Java есть несколько вариантов. Если вы не знаете о мощности лиц или цифр, а затем пойти:

public class Pair { 
    String person; 
    String number; 
    } 

Затем используйте набор, чтобы быть спасают от doublettes как

Set<Pair> pairs = new HashSet<>(); 
.... 
pairs.add(new Pair("689xxxx", "personA"); 
for (Pair pair : pairs) { 
    System.out.println(pair.number + " - " + pair.person); 
} 

Хайо

Смежные вопросы