Python Sözlüklerine Eşdeğer Java


96

Uzun süredir Python kullanıcısıyım ve sözlüklerin kullanım şeklini gerçekten seviyorum. Çok sezgiseldir ve kullanımı kolaydır. Python'un sözlüklerine eşdeğer iyi bir Java var mı? Hashmap ve hashtable kullanan insanları duydum. Birisi, hashtable ve hashmaps kullanmanın python'un sözlükleriyle olan benzerlik ve farklılıklarını açıklayabilir mi?

Yanıtlar:


109

Python'un dictsınıfı, Python belgelerinin gayri resmi olarak " eşleme türleri " olarak adlandırdığı şeyin bir uygulamasıdır . Dahili olarak, dictbir hashtable kullanılarak gerçekleştirilir.

Java'nın HashMapsınıfı, Maparayüzün bir uygulamasıdır . Dahili olarak, HashMapbir hashtable kullanılarak gerçekleştirilir.

Sözdiziminde birkaç küçük fark var ve uygulamaların biraz farklı ayarlandığına inanıyorum, ancak genel olarak tamamen değiştirilebilirler.


43
Örnek verilmemiştir :(
Kamran Bigdely

1
@kami: Ne tür bir örnek istersiniz?
Daniel Pryden

5
Python'un sözlüğünün java eşdeğerini iş başında gösteren herhangi bir örnek. Yararlı bir cevap bazı örnekler içerir, çünkü çoğu insan örnekleri görmeye ve bunları kodlarında kullanmaya gelir.
Kamran Bigdely

14
@kami: Bunun doğru olduğunu sanmıyorum. Soru, "belirli bir Python kodu için eşdeğer Java kodu nedir" diye sormaz. Aslında soru hiç kod içermiyor. Java'da Harita API'sini kullanma örneklerini eklemenin değerinin ne olduğundan emin değilim; bu cevap zaten kanonik belgelere bağlantılıdır. Java öğrenmek istiyorsanız, Stack Overflow ile değil, bir eğitimle başlayın. Kesinlikle bu cevabın kopyalanabilir bir kod örneğinden yoksun olduğu için olumsuz oylama gerektirdiğini düşünmüyorum.
Daniel Pryden

4
"Çoğu insan buraya örnekleri görmeye ve kodlarında kullanmaya gelir" diyen bu yorumu okumak üzücü , umarım bu yanlıştır.
0xc0de

32

Sözlük ve Harita fikri benzerdir. Her ikisi de aşağıdaki gibi öğeler içerir

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

Java'da Mapfarklı yöntemler uygulanır HashMap, TreeMapvb. put(), get()İşlemler benzerdir

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 

Java8'deki HashMap belgelerine bakın https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

Bildiğim kadarıyla (aslında java kullanmıyorum) sözlükler bir hashmap / hashtable için başka bir isim.

Http://www.fluffycat.com/Java/HashMaps/ adresinden kod almak , biraz fazladan java kazan plakası ile çok benzer bir şekilde kullanılıyor gibi görünüyor.


3
Java, Hashtable tarafından uygulanan bir Sözlük arayüzüne bile sahiptir. HashMap genellikle tercih edilir.
Michael Myers

1
@Michael Myers: Sözlük kullanımdan kaldırıldı, Oracle bunun yerine docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

İkisi arasındaki bir fark dict, hangi veri türlerinin anahtar görevi görebileceğine dair daha katı gereksinimlere sahip olmasıdır. Java, herhangi bir nesnenin anahtar olarak çalışmasına izin verir - ancak nesnenin hashCode()yönteminin, kendi iç durumunu yansıtan benzersiz bir değer döndürdüğünden emin olmanız gerekir . Python , nesnenin karma kodunun yaşam süresi boyunca asla değişmemesi gerektiğini belirten hashable tanımına uyacak anahtarlar gerektirir .


1
Bu doğru, ancak aslında her iki dil tarafından da uygulanmıyor. Açıkçası, bir Java hashCode()yönteminde veya bir Python __hash__()yönteminde, iç durumu yansıtan benzersiz bir değer döndürmeye çalışmalısınız. Java veya Python'da, değişken bir nesneniz varsa, muhtemelen bir hashtable anahtarı olmamalıdır, bu nedenle hashCode()veya __hash__()yöntemlerinden bir istisna atmak mantıklıdır .
Daniel Pryden

1
Deneyimlerime göre, Python'daki neredeyse her şey bir dikt anahtar olabilir ... 'daha katı gereksinim' nedir?
Ron Kalian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.