Echivalentul Java pentru dicționarele Python (Programare, Java, Python, Hash, Dicționar)

slimbo a intrebat.

Sunt un utilizator de mult timp al Python și îmi place foarte mult modul în care sunt folosite dicționarele. Ele sunt foarte intuitive și ușor de utilizat. Există un echivalent Java bun pentru dicționarele Python? Am auzit de oameni care folosesc hashmaps și hashtables. Ar putea cineva să explice asemănările și diferențele dintre utilizarea hashtables și hashmaps și dicționarele python?

4 răspunsuri
Daniel Pryden

Python’s dict este o implementare a ceea ce documentația Python numește în mod informal „tipuri de cartografiere„. La nivel intern, dict este implementată folosind un hashtable.

Java’s HashMap este o implementare a clasei Map interfeței. În interior, HashMap este implementată cu ajutorul unui hashtable.

Există câteva diferențe minore de sintaxă și cred că implementările sunt reglate ușor diferit, dar, în general, sunt complet interschimbabile.

Comentarii

    44

  • Nu este furnizat niciun exemplu 🙁 –  > Por Kamran Bigdely.
  • @kami: Ce fel de exemplu doriți? –  > Por Daniel Pryden.
  • Orice exemplu care ilustrează un echivalent java al dicționarului python în acțiune. Un răspuns util include un exemplu, deoarece majoritatea oamenilor vin aici pentru a vedea exemple și a le folosi în codul lor. –  > Por Kamran Bigdely.
  • 15

  • @kami: Nu cred că este corect. Întrebarea nu întreabă „care este codul Java echivalent pentru un anumit cod Python”. De fapt, întrebarea nu conține niciun cod. Nu sunt sigur care ar fi valoarea adăugării unor exemple de utilizare a API-ului de hărți în Java; acest răspuns face deja legătura cu documentația canonică. Dacă doriți să învățați Java, începeți cu un tutorial, nu cu Stack Overflow. Cu siguranță nu cred că acest răspuns merită un downvote doar pentru că nu are un exemplu de cod care să poată fi copiat și lipit. –  > Por Daniel Pryden.
  • Trist să citesc acel comentariu care spune că „majoritatea oamenilor vin aici pentru a vedea exemple și le folosesc în codul lor„, sper că acest lucru este greșit. –  > Por 0xc0de.
Hary Bakta

Ideea de dicționar și hartă este similară. Ambele conțin elemente precum

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

În Java, Map este implementat în moduri diferite, cum ar fi HashMap, , sau TreeMap etc. put(), get() operațiile sunt similare

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 

Consultați documentația HashMap în java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Tabitha

Din câte știu eu (de fapt nu folosesc java) dicționarele sunt doar un alt nume pentru un hashmap/hashtable.

Preluând codul din http://www.fluffycat.com/Java/HashMaps/ se pare că sunt folosite într-un mod foarte asemănător, cu un pic de boiler-plate java în plus.

Comentarii

  • Java are chiar și o interfață Dictionary care este implementată de Hashtable. Totuși, HashMap este, în general, preferată. –  > Por Michael Myers.
  • @Michael Myers : Dicționarul este depreciat, Oracle recomandă să se folosească în schimb Map. docs.oracle.com/javase/7/docs/api/java/java/util/Dictionary.html –  > Por Broken_Window.
Tim Clemons

O diferență între cele două este că dict are cerințe mai stricte în ceea ce privește tipurile de date care pot acționa ca o cheie. Java va permite ca orice obiect să funcționeze ca o cheie – deși trebuie să aveți grijă să vă asigurați că tipul obiectului hashCode() a obiectului returnează o valoare unică care să reflecte starea sa internă. Python cere ca cheile să se încadreze în definiția sa de hashable, , care specifică faptul că codul hash al obiectului nu trebuie să se schimbe niciodată pe durata de viață a acestuia.

Comentarii

  • Acest lucru este adevărat, dar nu este impus de fapt de niciunul dintre limbaje. În mod evident, în Java hashCode() sau într-o metodă Python __hash__() ar trebui să încercați să returnați o valoare unică care să reflecte starea internă. În Java sau în Python, dacă aveți un obiect mutabil, probabil că nu ar trebui să fie o cheie hashtable, așa că are sens să aruncați o excepție din metoda hashCode() sau __hash__() de la metodele or. –  > Por Daniel Pryden.
  • Din experiența mea, aproape orice în Python poate fi o cheie dict … care este „cerința mai strictă”? –  > Por Ron Kalian.