Java Setara dengan Kamus Python

95

Saya adalah pengguna lama Python dan sangat menyukai cara penggunaan kamus. Mereka sangat intuitif dan mudah digunakan. Apakah ada Java yang bagus yang setara dengan kamus python? Saya pernah mendengar orang menggunakan hashmaps dan hashtables. Bisakah seseorang menjelaskan persamaan dan perbedaan penggunaan hashtables dan hashmaps versus kamus python?

slimbo
sumber

Jawaban:

108

dictKelas Python adalah implementasi dari apa yang secara informal disebut dokumentasi Python sebagai " tipe pemetaan ". Secara internal, dictdiimplementasikan menggunakan hashtable.

HashMapKelas Java adalah implementasi dari Mapantarmuka. Secara internal, HashMapdiimplementasikan menggunakan hashtable.

Ada beberapa perbedaan kecil dalam sintaksis, dan saya yakin penerapannya disetel sedikit berbeda, tetapi secara keseluruhan semuanya dapat dipertukarkan.

Daniel Pryden
sumber
42
Tidak ada contoh yang diberikan :(
Kamran Bigdely
1
@kami: Contoh seperti apa yang Anda inginkan?
Daniel Pryden
5
Setiap contoh yang menggambarkan tindakan java yang setara dengan kamus python. Jawaban yang berguna termasuk beberapa contoh karena kebanyakan orang datang ke sini untuk melihat contoh dan menggunakannya dalam kode mereka.
Kamran Bigdely
14
@kami: Saya rasa itu tidak benar. Pertanyaannya tidak menanyakan "apa kode Java yang setara untuk beberapa kode Python tertentu". Sebenarnya pertanyaan tersebut tidak mengandung kode sama sekali. Saya tidak yakin apa nilainya dari menambahkan contoh penggunaan API Peta di Java; jawaban ini sudah ditautkan ke dokumentasi kanonik. Jika Anda ingin mempelajari Java, mulailah dengan tutorial, bukan Stack Overflow. Saya yakin jawaban ini tidak menjamin downvote hanya karena tidak memiliki contoh kode yang dapat disalin-tempel.
Daniel Pryden
4
Sedih membaca komentar yang mengatakan "kebanyakan orang datang ke sini untuk melihat contoh dan menggunakannya dalam kode mereka ", saya harap ini salah.
0xc0de
31

Ide kamus dan peta serupa. Keduanya mengandung unsur suka

key1:value1, key2:value2 ... and so on

Di Jawa, Mapdiimplementasikan cara yang berbeda seperti HashMap, atau TreeMapdll. put(), get()Operasi serupa

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 

Lihat dokumentasi HashMap di java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Hary Bakta
sumber
5

Sejauh yang saya tahu (saya tidak benar-benar menggunakan java) kamus hanyalah nama lain untuk hashmap / hashtable.

Mendapatkan kode dari http://www.fluffycat.com/Java/HashMaps/ tampaknya mereka digunakan dengan cara yang sangat mirip, dengan sedikit tambahan java boiler-plate.

Tabitha
sumber
3
Java bahkan memiliki antarmuka Kamus yang diimplementasikan oleh Hashtable. HashMap umumnya lebih disukai.
Michael Myers
1
@Michael Myers: Dictionary sudah tidak digunakan lagi, Oracle merekomendasikan untuk menggunakan Map sebagai gantinya docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window
5

Satu perbedaan di antara keduanya adalah dictpersyaratan yang lebih ketat tentang tipe data apa yang dapat bertindak sebagai kunci. Java akan mengizinkan objek apa pun untuk bekerja sebagai kunci - meskipun Anda harus berhati-hati untuk memastikan bahwa hashCode()metode objek mengembalikan nilai unik yang mencerminkan status internalnya. Python membutuhkan kunci agar sesuai dengan definisi hashable , yang menetapkan bahwa kode hash objek tidak boleh berubah selama masa pakainya.

Tim Clemons
sumber
1
Ini benar, tetapi sebenarnya tidak diberlakukan oleh kedua bahasa tersebut. Jelas, baik dalam hashCode()metode Java atau dalam __hash__()metode Python , Anda harus mencoba mengembalikan nilai unik yang mencerminkan keadaan internal. Baik di Java atau Python, jika Anda memiliki objek yang bisa berubah, itu mungkin tidak boleh menjadi kunci yang memiliki hashtable, jadi masuk akal untuk mengeluarkan pengecualian dari metode hashCode()atau __hash__().
Daniel Pryden
1
Menurut pengalaman saya, hampir semua hal di Python bisa menjadi kunci dict ... apa 'persyaratan yang lebih ketat'?
Ron Kalian