Java еквівалентна словникам Python


93

Я давно користуюся Python і мені дуже подобається спосіб використання словників. Вони дуже інтуїтивно зрозумілі та прості у використанні. Чи існує хороша Java, еквівалентна словникам python? Я чув про людей, які використовують хеш-карти та хештеги. Хтось може пояснити схожість та відмінності використання хеш-тегів та хеш-карт проти словників python?

Відповіді:


106

dictКлас Python - це реалізація того, що документація Python неофіційно називає " типи відображення ". Внутрішньо dictреалізовано за допомогою хеш-таблиці.

HashMapКлас Java - це реалізація Mapінтерфейсу. Внутрішньо HashMapреалізовано за допомогою хеш-таблиці.

Є кілька незначних відмінностей у синтаксисі, і я вважаю, що реалізації налаштовані дещо інакше, але загалом вони повністю взаємозамінні.



1
@kami: Який приклад ти хотів би?
Даніель Приден

5
Будь-який приклад, який ілюструє Java-еквівалент словника python в дії. Корисна відповідь включає кілька прикладів, оскільки більшість людей приходять сюди, щоб переглянути приклади та використовувати їх у своєму коді.
Камран Бігделі

13
@kami: Я не думаю, що це правильно. Питання не задає питання "який еквівалентний код Java для певного коду Python". Насправді питання взагалі не містить коду. Я не впевнений, яке значення мало б додавання прикладів використання Map Map в Java; ця відповідь уже посилається на канонічну документацію. Якщо ви хочете вивчити Java, починайте з підручника, а не з Stack Overflow. Я, звичайно, не думаю, що ця відповідь вимагає негативного голосу лише тому, що їй бракує зразка коду, який можна вставити в копію.
Даніель Приден

4
Сумно читати коментар, в якому сказано: "Більшість людей приходять сюди, щоб побачити приклади та використовувати їх у своєму коді ", я сподіваюся, це неправильно.
0xc0de

31

Ідея словника та карти схожа. Обидва містять такі елементи, як

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


5

Наскільки мені відомо (я насправді не використовую java), словники - це просто інша назва хеш-карти / хеш-таблиці.

Захопивши код з http://www.fluffycat.com/Java/HashMaps/, здається, вони використовуються дуже подібним чином, з трохи додаткової котелки Java.


3
Java навіть має інтерфейс словника, який реалізований Hashtable. Однак, як правило, краща HashMap.
Майкл Майерс

1
@Michael Myers: Словник застарілий, Oracle рекомендує замість нього
Broken_Window

5

Одна відмінність між ними полягає в тому, що dictсуворіші вимоги щодо того, які типи даних можуть виступати в ролі ключа. Java дозволить будь-якому об'єкту працювати як ключ - хоча вам слід подбати про те, щоб hashCode()метод об'єкта повертав унікальне значення, яке відображає його внутрішній стан. Python вимагає ключів, щоб відповідати його визначенню хешируемого , яке визначає, що хеш-код об'єкта ніколи не повинен змінюватися протягом усього життя.


1
Це правда, але насправді це не забезпечується жодною мовою. Очевидно, що або в hashCode()методі Java, або в __hash__()методі Python , вам слід спробувати повернути унікальне значення, яке відображає внутрішній стан. І в Java, і в Python, якщо у вас є змінний об’єкт, він, мабуть, не повинен бути ключем хеш-таблиці, тому має сенс викинути виняток із методів hashCode()or __hash__().
Даніель Приден

1
З мого досвіду, майже будь-що в Python може бути ключем dict ... що таке "суворіша вимога"?
Рон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.