Что вы подразумеваете под «положением»? HashMaps не упорядочены, поэтому у них нет обычного понятия «позиция», которое вы получили бы с чем-то вроде вектора.
Mat
1
Вы имеете в виду его порядок размещения или какой-то другой порядок?
Это не совсем ответ на вопрос. Другие ответы ниже более полезны.
forresthopkinsa
6
С уважением, здесь цитируется документация, которая прямо отвечает на вопрос
Уэйн
1
Даже если порядок не является постоянным с течением времени, все равно можно получить один из членов по заданной позиции.
Новичок
Я не слежу. Объясните?
Уэйн
Ссылка HashMap не работает / 404.
Raf
111
Используйте LinkedHashMap, и когда вам нужно получить по позиции, преобразуйте значения в ArrayList.
LinkedHashMap<String,String> linkedHashMap =newLinkedHashMap<String,String>();/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");/* Get by position */int pos =1;String value =(newArrayList<String>(linkedHashMap.values())).get(pos);
Самое простое, я должен сказать ... Вместо того, чтобы конвертировать все, вы используете только набор ключей. Superb
kirtan403
19
Если вам по какой-то причине необходимо придерживаться hashMap, вы можете преобразовать keySet в массив и проиндексировать ключи в массиве, чтобы получить значения на карте следующим образом:
Object[] keys = map.keySet().toArray();
Затем вы можете получить доступ к карте, например:
Реализация хэш-таблицы и связанного списка интерфейса Map с предсказуемым порядком итераций. Эта реализация отличается от HashMap тем, что поддерживает двусвязный список, проходящий через все его записи.
Я предполагаю, что под «позицией» вы имеете в виду порядок, в котором вы вставили элементы в HashMap. В этом случае вы хотите использовать LinkedHashMap. Однако LinkedHashMap не предлагает метода доступа; вам нужно будет написать что-то вроде
Другой рабочий подход - преобразование значений карты в массив с последующим извлечением элемента по индексу. Тестовый запуск 100 000 элементов путем поиска по индексу в LinkedHashMap 100 000 объектов с использованием следующих подходов привел к следующим результатам:
//My answer:publicParticle getElementByIndex(LinkedHashMap<Point,Particle> map,int index){return map.values().toArray(newParticle[map.values().size()])[index];}//68 965 ms//Syd Lambert's answer:publicParticle getElementByIndex(LinkedHashMap<Point,Particle> map,int index){return map.get((map.keySet().toArray())[ index ]);}//80 700 ms
В целом получение элемента по индексу из LinkedHashMap кажется довольно сложной операцией.
HashMap - и лежащая в основе структура данных - хеш-таблицы не имеют понятия позиции. В отличие от LinkedList или Vector, ключ ввода преобразуется в «корзину», в которой сохраняется значение. Эти корзины не упорядочены таким образом, который имеет смысл за пределами интерфейса HashMap, и поэтому элементы, которые вы помещаете в HashMap, не упорядочены в том смысле, который вы ожидали бы с другими структурами данных.
HashMaps не разрешает доступ по позиции, он знает только о хэш-коде и может получить значение, если он может вычислить хеш-код ключа. В TreeMaps есть понятие упорядочивания. Карты Linkedhas сохраняют порядок, в котором они были введены на карту.
Ответы:
HashMaps не сохраняют порядок:
Взгляните на LinkedHashMap , который гарантирует предсказуемый порядок итераций.
источник
Используйте LinkedHashMap, и когда вам нужно получить по позиции, преобразуйте значения в ArrayList.
источник
Если вы хотите сохранить порядок, в котором вы добавляли элементы на карту, используйте
LinkedHashMap
вместо простоHashMap
.Вот подход, который позволит вам получить значение по его индексу на карте:
источник
Если вам по какой-то причине необходимо придерживаться hashMap, вы можете преобразовать keySet в массив и проиндексировать ключи в массиве, чтобы получить значения на карте следующим образом:
Затем вы можете получить доступ к карте, например:
источник
String myKey = keys[i].toString();
Использование
LinkedHashMap
:источник
Используйте LinkedHashMap и используйте эту функцию.
Определите вот так и.
Функция может вернуть выбранную запись.
источник
Я предполагаю, что под «позицией» вы имеете в виду порядок, в котором вы вставили элементы в HashMap. В этом случае вы хотите использовать LinkedHashMap. Однако LinkedHashMap не предлагает метода доступа; вам нужно будет написать что-то вроде
источник
Другой рабочий подход - преобразование значений карты в массив с последующим извлечением элемента по индексу. Тестовый запуск 100 000 элементов путем поиска по индексу в LinkedHashMap 100 000 объектов с использованием следующих подходов привел к следующим результатам:
В целом получение элемента по индексу из LinkedHashMap кажется довольно сложной операцией.
источник
HashMap - и лежащая в основе структура данных - хеш-таблицы не имеют понятия позиции. В отличие от LinkedList или Vector, ключ ввода преобразуется в «корзину», в которой сохраняется значение. Эти корзины не упорядочены таким образом, который имеет смысл за пределами интерфейса HashMap, и поэтому элементы, которые вы помещаете в HashMap, не упорядочены в том смысле, который вы ожидали бы с другими структурами данных.
источник
HashMap не имеет понятия позиции, поэтому нет возможности получить объект по позиции. Объекты в Картах устанавливаются и достаются ключами.
источник
вы можете использовать приведенный ниже код, чтобы получить ключ:
String [] keys = (String[]) item.keySet().toArray(new String[0]);
и получить объект или список, которые вставляются в HashMap с ключом этого элемента, например:
item.get(keys[position]);
источник
По умолчанию java LinkedHasMap не поддерживает получение значения по позиции. Поэтому я предлагаю использовать индивидуальные
IndexedLinkedHashMap
Затем вы можете использовать эту настроенную LinkedHasMap как
ЧТОБЫ добавить значения
Получить значение по индексу
источник
HashMaps не разрешает доступ по позиции, он знает только о хэш-коде и может получить значение, если он может вычислить хеш-код ключа. В TreeMaps есть понятие упорядочивания. Карты Linkedhas сохраняют порядок, в котором они были введены на карту.
источник
Можно попробовать реализовать что-то подобное, посмотрите:
Надеюсь, это сработает для вас.
источник