Listă vs Hartă în Java (Programare, Java, Lista, Hartă)

JBeg a intrebat.

Nu am înțeles sensul hărților în Java. Când se recomandă utilizarea unei hărți în locul unei liste?

mulțumesc anticipat,

nohereman

9 răspunsuri
Chris

Harta Java: Un obiect care mapează cheile la valori. O hartă nu poate conține chei duplicate; fiecare cheie poate fi mapată la cel mult o valoare.

Lista Java: O colecție ordonată (cunoscută și sub numele de secvență). Utilizatorul acestei interfețe are un control precis asupra locului din listă în care este inserat fiecare element. Utilizatorul poate accesa elementele prin indexul lor întreg (poziția în listă) și poate căuta elemente în listă.

Diferența constă în faptul că acestea sunt diferite. Harta este o cartografiere de chei/valori, iar lista de o listă de elemente.

Comentarii

  • ați uitat că listele pot conține duplicate –  > Por Woot4Moo.
  • O listă este ordonată? Sau „ordonat” înseamnă altceva decât „sortat”. Nu încerc să fiu indiscret… –  > Por Tony Ennis.
  • în documentul java scrie ordonat, aproape că am pus același lucru Tony. –  > Por Woot4Moo.
  • @Tony: Sorted != Ordered. Pentru o colecție ordonată, elementele au o ordine (y) (care este evidentă pentru programator și, de obicei, poate fi manipulată de către programator). Listele sunt ordonate, de exemplu, fiecare element dintr-o LinkedList punctează spre următorul element. În cazul colecțiilor sortate, ordinea elementelor este determinată prin compararea elementelor și se păstrează întotdeauna ordonată. – user395760
Tony Ennis

Să zicem că aveți o mulțime de studenți cu nume și ID-uri de student. Dacă îi puneți într-o listă, singura modalitate de a găsi studentul cu student_id = 300 este să vă uitați la fiecare element al listei, unul câte unul, până când găsiți studentul potrivit.

În cazul unei hărți, asociați ID-ul fiecărui student și instanța studentului. Acum puteți spune „adu-mi studentul 300” și veți obține instantaneu studentul respectiv.

Utilizați o hartă atunci când trebuie să alegeți anumiți membri dintr-o colecție. Utilizați o listă atunci când nu are sens să faceți acest lucru.

Să presupunem că aveți exact aceleași instanțe de studenți, dar sarcina dumneavoastră este de a produce un raport cu numele tuturor studenților. Le-ați pune într-o Listă, deoarece nu ar fi nevoie să alegeți studenți individuali și, prin urmare, nu ar fi nevoie de o Hartă.

Comentarii

  • +1 pentru că nu ați citat javadoc și ați oferit un exemplu ilustrativ 🙂 –  > Por andr.
  • că din punct de vedere tehnic nu este corect. Dacă id-ul studentului se referă la un index, de exemplu id 300 -> 299 [index], este o căutare în timp constant –  > Por Woot4Moo.
  • Nu am spus că este, însă afirmația mai amplă pe care ați făcut-o este mai puțin corectă (din punct de vedere teoretic) –  > Por Woot4Moo.
  • @Woot4Moo Ce se întâmplă dacă ID-ul studentului a fost un șir de caractere în loc de un număr? –  > Por user2520215.
  • @user2520215 ce?  > Por Woot4Moo.
rkg

Probabil că este o idee bună să revizuiască Acces aleatoriu Vs Accesul secvențial Structuri de date. Ambele au complexități diferite în timp de execuție și sunt potrivite pentru diferite tipuri de contexte.

Colin Hebert

O hartă este utilizată ca o asociere a unei chei și a unei valori. În cazul unei liste, aveți practic doar valori.
În Listă, indicii sunt întotdeauna int, în timp ce în Mapă puteți avea un alt obiect ca cheie.


Resurse :

Woot4Moo

Depinde de preocupările dumneavoastră legate de performanță. O hartă mai explicit un HashMap va garanta O(1) la inserții și eliminări. O listă are în cel mai rău caz O(n) pentru a găsi un element. Așadar, dacă ați fi atât de amabil să detaliați care este scenariul dvs., am putea să vă ajutăm mai mult.

Sheldon L. Cooper

Atunci când doriți să faceți o hartă în loc de listă. Numele acestor interfețe au o semnificație și nu ar trebui să o ignorați.

Folosiți o hartă atunci când doriți ca structura dvs. de date să reprezinte o cartografiere pentru chei la valori. Folosiți o listă atunci când doriți ca datele dvs. să fie stocate într-un format arbitrar, ordonat.

Comentarii

  • Acest lucru este ca și cum ați folosi un cuvânt în propria definiție. Acesta nu este un răspuns foarte util… –  > Por Chris Thompson.
  • Nu, subliniază faptul că numele acestor interfețe au un înțeles și că nu ar trebui să ignorați acest lucru. –  > Por Sheldon L. Cooper.
  • Am adăugat comentariul dvs. și câteva informații suplimentare, apoi am eliminat votul meu negativ. –  > Por Erick Robertson.
InsertNickHere

Cred că este foarte mult problema modului în care doriți să vă accesați datele. În cazul unei hărți, puteți accesa „direct” elementele cu o cheie cunoscută, în timp ce într-o listă ar trebui să le căutați, chiar dacă sunt sortate.

Comparați:

List<MyObject> list = new ArrayList<MyObject>();
//Fill up the list
// Want to get object "peter"
for( MyObject m : list ) {
 if( "peter".equals( m.getName() ) {
    // found it
 }
}

Într-o hartă puteți tasta pur și simplu

Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");

Dacă aveți date de prelucrat și trebuie să faceți acest lucru cu toate obiectele oricum, o listă este ceea ce vă doriți. Dacă doriți să procesați obiecte individuale cu o cheie bine cunoscută, o hartă este mai bună.Nu este răspunsul complet (doar cele două variante ale mele…), dar sper că vă poate ajuta.

amorfis

Map și List au scopuri diferite.

List deține o colecție de obiecte. Ordonată (puteți obține un element după index).

Map deține cheia de cartografiere -> valoarea. De exemplu, maparea persoanei în funcție de poziție: „JBeg” -> „programator”. Și nu este ordonată. Puteți obține valoarea după cheie, dar nu după index.

Comentarii

  • Implementarea în treemap a unei hărți nu este neordonată. –  > Por jrowe08.
  • sortat != ordonat –  > Por trilogie.
Rizwan Mushtaq

Hărțile stochează obiectele de date cu chei unice, prin urmare oferă acces rapid la obiectele stocate. Puteți utiliza ConcurrentHashMap pentru a obține simultaneitate în mediile cu mai multe fire de execuție.În timp ce listele pot stoca date duplicate și trebuie să parcurgeți elementele de date pentru a accesa un anumit element, prin urmare oferă acces lent la obiectele stocate.Puteți alege orice structură de date în funcție de cerințele dumneavoastră.