Java Class that implements Map and keeps insertion order?
Класс Java, который реализует Map и сохраняет порядок вставки?
Я ищу класс на Java, который имеет связь ключ-значение, но без использования хэшей. Вот что я сейчас делаю.:
Добавляйте значения в a Hashtable.
Получаем итератор для Hashtable.entrySet().
Перебирать все значения и:
Получаем Map.Entry для итератора.
Создайте объект типа Module (пользовательский класс) на основе значения.
Добавьте класс в JPanel.
Показать панель.
Проблема в том, что у меня нет контроля над порядком, в котором я получаю значения обратно, поэтому я не могу отобразить значения в заданном порядке (без жесткого кодирования порядка).
Я бы использовал для этого ArrayList or Vector, но позже в коде мне нужно захватить Module объект для данного ключа, чего я не могу сделать с помощью ArrayList or Vector.
Кто-нибудь знает о бесплатном Java-классе с открытым исходным кодом, который будет это делать, или о способе получения значений из Hashtable в зависимости от того, когда они были добавлены?
Спасибо!
Переведено автоматически
Ответ 1
Я предлагаю LinkedHashMap или a TreeMap. A LinkedHashMap сохраняет ключи в том порядке, в котором они были вставлены, в то время как a TreeMap сортируется через Comparator или естественный Comparable порядок ключей.
Поскольку ему не нужно сохранять элементы отсортированными, LinkedHashMap должно быть быстрее для большинства случаев; TreeMap имеет O(log n) производительность для containsKey, get, put, и remove, согласно Javadocs, в то время как LinkedHashMap есть O(1) для каждого.
Если ваш API ожидает только предсказуемый порядок сортировки, в отличие от определенного порядка сортировки, рассмотрите возможность использования интерфейсов, реализуемых этими двумя классами, NavigableMap или SortedMap. Это позволит вам не пропускать конкретные реализации в свой API и впоследствии переключаться на любой из этих конкретных классов или совершенно другую реализацию по желанию.
Ответ 2
LinkedHashMap вернет элементы в том порядке, в котором они были вставлены в карту, когда вы выполняете итерацию по набору ключей(), entrySet() или values() карты.
При этом элементы будут напечатаны в том порядке, в каком они были помещены на карту:
id = 1 name = rohan age=26
Ответ 3
Если неизменяемая карта соответствует вашим потребностям, то в Google есть библиотека под названием guava (см. Также Вопросы по guava)
Guava предоставляет ImmutableMap с надежным заданным пользователем порядком итераций. Эта неизменяемая карта имеет производительность O (1) для containsKey, get . Очевидно, что put и remove не поддерживаются.
Но если вы хотите отсортировать значения в map с помощью пользовательского объекта или любого ключа примитивного типа данных, тогда вам следует использовать TreeMap Для получения дополнительной информации обратитесь к этой ссылке