Я давно пользуюсь Python, и мне очень нравится, как используются словари. Они очень интуитивно понятны и просты в использовании. Есть ли хороший Java-эквивалент словарей Python? Я слышал о людях, использующих хэш-карты и хэш-таблицы. Может ли кто-нибудь объяснить сходства и различия использования хэш-таблиц и хэш-карт по сравнению со словарями Python?
источник
Идея словаря и карты схожа. Оба содержат такие элементы, как
key1:value1, key2:value2 ... and so on
В Java
Map
реализован различными способами , напримерHashMap
, или иTreeMap
т.д.put(), get()
операции аналогичныimport java.util.HashMap; Map map = new HashMap(); // Put elements to the map map.put("Ram", new Double(3434.34)); map.put("Krishna", new Double(123.22)); map.put("Hary", new Double(1378.00)); //to get elements map.get("Krishna"); # =123.22 map.get("Hary"); # = 1378.00
См. Документацию HashMap в java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
источник
Насколько мне известно (я фактически не использую java), словари - это просто еще одно название для хэш-карты / хеш-таблицы.
Взяв код из http://www.fluffycat.com/Java/HashMaps/, кажется, что они используются очень похожим образом, с небольшим количеством дополнительных шаблонов java.
источник
Одно различие между ними заключается в
dict
более строгих требованиях к тому, какие типы данных могут выступать в качестве ключа. Java позволяет любому объекту работать как ключ, хотя вы должны позаботиться о том, чтобыhashCode()
метод объекта возвращал уникальное значение, отражающее его внутреннее состояние. Python требует, чтобы ключи соответствовали его определению хеширования , которое указывает, что хэш-код объекта никогда не должен изменяться в течение его времени существования.источник
hashCode()
методе Java, либо в__hash__()
методе Python вы должны попытаться вернуть уникальное значение, отражающее внутреннее состояние. В Java или Python, если у вас есть изменяемый объект, он, вероятно, не должен быть ключом хэш-таблицы, поэтому имеет смысл генерировать исключение из методовhashCode()
или__hash__()
.