1) Что я должен использовать в качестве списка имен? Hashmap, Vector, Hashtable, List, ArrayList?
Ну, это зависит от ваших потребностей :) Но из-за вопроса и потому, что вы смешиваете интерфейсы коллекций (например, List
) и конкретные реализации (например, ArrayList
или Vector
), я думаю, что вы должны начать с основ. потрясающим ресурсом для этого является Trail: Collections из Учебников по Java (tm), очень рекомендуемое чтение.
Во-первых, вам необходимо понять различные интерфейсы коллекций и их назначение. Тогда вы выберете конкретные реализации. Раздел Interfaces учебника, который я цитирую ниже, поможет вам сделать первый шаг:
Следующий список описывает ядро
интерфейсы коллекции:
Collection
- корень иерархии коллекции. Коллекция
представляет группу объектов, известных как
его элементы. Интерфейс Collection
наименее распространенный знаменатель, который
все коллекции реализуются и используются
передавать коллекции и
манипулировать ими, когда максимум
общность желательна. Некоторые типы
коллекции позволяют дублировать элементы,
а другие нет. Некоторые заказаны
и другие неупорядочены. Ява
Платформа не обеспечивает прямой
реализации этого интерфейса, но
обеспечивает реализацию более
конкретные подынтерфейсы, такие как Set
и List
. Также см. Коллекция
Интерфейс секция.
Set
- коллекция, которая не может содержать повторяющиеся элементы. это
интерфейс моделирует математический набор
абстракция и используется для представления
наборы, такие как карты, содержащие
покерная комбинация, курсы, составляющие
расписание студента, или процессы
работает на машине. Смотри также Набор
Интерфейс секция.
List
- упорядоченная коллекция (иногда называемая последовательностью). Списки
может содержать повторяющиеся элементы.
Пользователь списка обычно имеет точный
контролировать, где в списке каждый
элемент вставлен и может получить доступ
элементы по их целочисленному индексу
(позиция). Если вы использовали Vector
,
ты знаком с генералом
аромат List
. Также см. Список
Интерфейс секция.
Queue
- коллекция, используемая для хранения нескольких элементов перед обработкой.
Помимо основных операций по сбору,
Очередь обеспечивает дополнительную вставку,
добыча и инспекционные операции.
Очереди обычно, но не
обязательно, заказать элементы в FIFO
(первым пришел - первым вышел). среди
исключения являются приоритетными очередями,
какие элементы заказа в соответствии с
поставляемый компаратор или элементы
естественный порядок. Безотносительно
порядок используется, руководитель очереди
это элемент, который будет удален
по телефону remove
или poll
. В ФИФО
очередь, все новые элементы вставлены
в хвосте очереди. Другие виды
очередей может использовать разное размещение
правила. Каждая Queue
реализация должна
указать его упорядочивающие свойства. Также
см. раздел Интерфейс очереди .
Map
- объект, который сопоставляет ключи со значениями. Карта не может содержать дубликат
ключи; каждый ключ может отображаться не более одного
значение. Если вы использовали Hashtable
,
вы уже знакомы с
основы Map
. Также см. Карта
Интерфейс секция.
В вашем случае, я не думаю, что вы хотите Queue
, я не уверен, что вам нужен Map
, я думаю, что вы хотите разрешить дублирование элементов, чтобы вы не хотели Set
и это оставляет нас с List
.
Что касается конкретной реализации, если потокобезопасная реализация не требуется, ArrayList
- или LinkedList
, в зависимости от алгоритма в 2) - может быть хорошим выбор). Но на самом деле, посмотрите раздел Реализации этого учебника, чтобы узнать больше.
2) Мне нужно сопоставить их так: Джо-Боб, Эндрю-Билл, Чарли-Сара, Энн-Виктор. Не могли бы вы показать мне пример, как сделать цикл, который бы сделал это?
Если первоначальный список может содержать дубликаты элементов, я бы не использовал Map
для хранения совпадающих имен (поскольку Map
не может содержать дубликаты ключей). Итак, я бы создал Couple
класс для хранения связанных имен:
public class Couple {
private name1;
private name2;
...
}
и используйте List<Couple>
для хранения совпадающих имен. Но, поскольку логика алгоритма все еще не ясна (всегда ли первоначальный список содержит нечетное количество элементов? Всегда ли один элемент связан с ближайшим следующим?), Я не могу дать больше указаний.