Есть ли в Java коллекции с тегами? - PullRequest
1 голос
/ 29 сентября 2011

Есть ли в Java коллекции с тегами? Чтобы уточнить, я хочу по существу классифицировать каждый элемент в списке с каким-либо объектом (например, строкой), чтобы я мог ссылаться на различные объекты в списке по тегу, который я указываю, а не по типу объекта или содержимому элемента.

РЕДАКТИРОВАТЬ : HashMap не будет работать, так как порядок элементов в списке также считается важным. Насколько я понимаю, HashMap не практичен, когда порядок списка имеет какое-то значение. Если я ошибаюсь в этом вопросе, непременно исправьте меня.

Ответы [ 10 ]

3 голосов
/ 29 сентября 2011

Нет, насколько я знаю, в стандартных библиотеках Java нет "помеченных" коллекций. Но вы можете использовать Map<Tag,Set<String>> для пометки строк.

3 голосов
/ 29 сентября 2011

если каждый ключ на карте соответствует набору объектов, вы сможете легко найти каждый объект с помощью определенного тега (ключа)

3 голосов
/ 29 сентября 2011

Вы ищете Map. Эта структура данных отображает ключи в значения .

2 голосов
/ 29 сентября 2011

Если вы не ограничены тем, что находится в JDK, рассмотрите возможность использования Guava Multimaps .Они предоставляют встроенную поддержку для карты наборов.

2 голосов
/ 29 сентября 2011

Вы можете использовать карту

Map<String, Object> = new HashMap<String, Object>(); 

Вы можете заменить String на что угодно.Одна проблема, с которой вы можете столкнуться, это если вы хотите классифицировать несколько объектов с одним и тем же «тегом».Например, тег «Cat» может применяться к нескольким уникальным объектам cat, а hashMap позволит вам иметь только один объект Cat, на который указывает тег «Cat».Если это то, что вы хотите сделать (несколько объектов, на которые указывает один тег), вам нужно будет объявить карту как:

Map<String, List<Object>> = new HashMap<String, List<Object>>(); 

Это создаст HashMap, содержащий список для каждого объекта, чтобы вы могли иметьнесколько объектов, на которые указывает один тег.

1 голос
/ 29 сентября 2011

См. SortedMap и TreeMap .

1 голос
/ 29 сентября 2011

Если порядок важен, тогда используйте LinkedHashMap .

1 голос
/ 29 сентября 2011

Это недостаточно подробно.Мы не знаем, если: - разрешено несколько тегов для каждого элемента - разрешено несколько элементов для каждого тега

Я собираюсь найти самое широкое решение, где оба они верны.Первое, что вам нужно, это ваш класс Tag (я предлагаю перечисление)

public enum Tag {
    TAG1, TAG2, TAG3; // add your tags here
}

Тогда вашей коллекцией будет карта, ключом которой является ваш объект, и значением вашего списка тегов для каждого объекта.

Map<Object, List<Tag>> items = new HashMap<Object, List<Tag>>();

Конечно, вы можете заменить «Tag» на String, если вы хотите разрешить любой тег, а не только известные теги.

И в зависимости от того, что вы хотите сделать со своей коллекцией,вы можете захотеть отменить это:

Map<Tag, List<Object>> = new HashMap<Tag, List<Object>>();

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

1 голос
/ 29 сентября 2011

Возможно, Map - это то, что вам нужно

0 голосов
/ 29 сентября 2011

звучит так, как вы хотите hashmap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...