Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

HashMap implementare Java

- - - - -
  • Please log in to reply
8 replies to this topic

#1
mihaela014

mihaela014

    New Member

  • Grup: Members
  • Posts: 18
  • Înscris: 18.06.2010
Buna seara! Incerc sa inteleg si sa implementez colectiile din java. Am inteles si implementat Stiva, Lista, Cozile, dar m-am impotmolit la HashMap-uri. Am citit teorie si am vazut cateva implementari, insa sunt diferite si nu le inteleg foarte bine. Am inteles ca HashMap-ul implementeaza metodele interfetei Map (am vazut care sunt).
Mi-am facut interfata cu functiile aferente, apoi clasa mea care implementeaza metodele interfetei. Aceasta clasa trebuie sa aiba 2 ArrayList, unu pt chei si unu pt valori ?

Am mai vazut o varianta in care myHash(de exemplu) contine doar cheie si valoare( de exemplu int key, String value). Insa nu inteleg cum mi se face mie get-ul si set-ul daca nu am un vector. Ma poate ajuta cineva cu o implementare exacta? (M-am uitat pe stackOverflow)

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,194
  • Înscris: 24.02.2007
Hash table, descrisa in mai orice carte de algoritmi/structuri de date.

Edited by dani.user, 14 March 2018 - 23:39.


#3
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

 mihaela014, on 14 martie 2018 - 23:20, said:

Am mai vazut o varianta in care myHash(de exemplu) contine doar cheie si valoare( de exemplu int key, String value). Insa nu inteleg cum mi se face mie get-ul si set-ul
vezi ca faci confuzie intre a implementa si a folosi. A implementa insemana a creea la randul tau un API echivalent, a folosi un API e cu totul altceva.
Cine stie sa implementeze API-uri echivalente in java cu siguranta nu are nici o problema sa  inteleaga codul sursa in java pentru un HashMap, adica intrebarea nu-si are sensul

 dani.user, on 14 martie 2018 - 23:33, said:

Hash table, descrisa in mai orice carte de algoritmi/structuri de date.
Vorbim de java, lucrurile stau complet diferit. In java hashtable-lul este sincronizat iar hashmap nu este.Asta inseamna ca in aplicatii singlethread hashmap  performeaza mult mai bine decat
hashtable. In in aplicatii multi-threading lucrurile stau invers.
In java hashtable-ul nu  accepta null-uri si pentru chei si/sau valori , insa hashmap-ul accepta insa o singura valoarea de null in chei si multe valori de null-uri in valori
LinkedHashMap extinde HashMap, insa cu diferenta ca LHM-ul pastreaza ordinea de insertie in map, pe cand HashMap-ul nu o face

Asta inseamna ca daca la nivel de cod, am nevoie sa trec de la colectie care nu pastreaza ordinea de insertie la o colectie care o face, pur si simplu fac swap de obiect in cod si atat
Nu acelasi lucru este valabil daca folosesc un hashtable.

Edited by WinstonMontana, 15 March 2018 - 05:13.


#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
dani.user a zis de hash table din cartea de algoritmica, si a zis bine ce a zis.

dar sunt de acord ca @OP cel mai probabil incurca a folosi cu a implementa.

#5
mihaela014

mihaela014

    New Member

  • Grup: Members
  • Posts: 18
  • Înscris: 18.06.2010

 WinstonMontana, on 15 martie 2018 - 05:23, said:

vezi ca faci confuzie intre a implementa si a folosi. A implementa insemana a creea la randul tau un API echivalent, a folosi un API e cu totul altceva.
Cine stie sa implementeze API-uri echivalente in java cu siguranta nu are nici o problema sa  inteleaga codul sursa in java pentru un HashMap, adica intrebarea nu-si are sensul


Vorbim de java, lucrurile stau complet diferit. In java hashtable-lul este sincronizat iar hashmap nu este.Asta inseamna ca in aplicatii singlethread hashmap  performeaza mult mai bine decat
hashtable. In in aplicatii multi-threading lucrurile stau invers.
In java hashtable-ul nu  accepta null-uri si pentru chei si/sau valori , insa hashmap-ul accepta insa o singura valoarea de null in chei si multe valori de null-uri in valori
LinkedHashMap extinde HashMap, insa cu diferenta ca LHM-ul pastreaza ordinea de insertie in map, pe cand HashMap-ul nu o face

Asta inseamna ca daca la nivel de cod, am nevoie sa trec de la colectie care nu pastreaza ordinea de insertie la o colectie care o face, pur si simplu fac swap de obiect in cod si atat
Nu acelasi lucru este valabil daca folosesc un hashtable.

Vreau sa-mi construiesc eu toate metodele si functiile (implementare), ca sa inteleg cum functioneaza. Dati-mi va rog un link unde sa vad o implementare sau o explicatie. Citesc in "Data Structures and Algorithms in Java, 6 th Edition, 2014". Este ceva, dar nu inteleg eu implementarea. Si da, am folosit "implements" pentru ca Map e interfata, iar clasa mea implementeaza acele metode.
am de exemplu
// key = int;  value = String;
public interface Map {

int getSize();
boolean isEmpty();
String get(int key);
String put(int key, String value);
String remove(int key, String value);

Iterable keySet();
Iterable values();
Iterable entrySet();

}

si mai am
public class MyHashMap implements Map{

private ArrayList keys;   ????
private ArrayList values;   ???

... }

La aceasta parte a doua, am nevoie de ajutor.

 OriginalCopy, on 15 martie 2018 - 08:56, said:

dani.user a zis de hash table din cartea de algoritmica, si a zis bine ce a zis.

dar sunt de acord ca @OP cel mai probabil incurca a folosi cu a implementa.

E vorba de a implementa. Sa-mi fac propriile clase, metode, interfete, care sa functioneze ca HashMap-ul .

#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 mihaela014, on 15 martie 2018 - 13:55, said:

E vorba de a implementa. Sa-mi fac propriile clase, metode, interfete, care sa functioneze ca HashMap-ul .
Si, cat de mare e muntele de carti de algoritmica pe care le ai pe masa, in urma mesajului lui dani.user?

#7
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018
Nu ati inteles ce vrea fata. Ea doreste o replicare a clasei de HashMap exact cum este redactata in java:
http://grepcode.com/...ashMap.<init>()
Esta ca si cum tu ai vrea sa inveti C si pt asta trebuie mai inatai sa inveti cum sa proiectezi compilatorul de C (asa gandeste ea) .

Mihaela daca vrei sa stii ca in spatele HashMap-ului stau combinatii de algortimi precum  Greedy , Divide Et Impera si Programa Dinamica, daca tot vorbim de implementare de colectii.

De curiozitate, poti sa pui aici ce ai "implementat" in java pana acum precum : "Stiva", "Lista", "Cozile" ?
Eu banuiesc ca de fapt ai replicat doar modul cum sunt concepute si redactate insa nu si functionalitatea din spatele lor.  Posted Image

Edited by WinstonMontana, 15 March 2018 - 16:50.


#8
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Mai bine invata sa folosesti colectiile din Java, decit sa le implementezi. Macar ajuta la ceva, implementarea unui HashMap mai prost nu ajuta la nimic :first:

Daca cindva o sa ajungi in situatia in care nici o colectie din Java nu se potriveste pentru ceea ce vrei sa faci si nici nu gasesti o alternativa deja implementata, testata si rastestata, atunci poti sa-ti freci creierii creind propriul HashMap "mai bun" Posted Image

#9
mihaela014

mihaela014

    New Member

  • Grup: Members
  • Posts: 18
  • Înscris: 18.06.2010

 WinstonMontana, on 15 martie 2018 - 16:44, said:

Nu ati inteles ce vrea fata. Ea doreste o replicare a clasei de HashMap exact cum este redactata in java:
http://grepcode.com/...ashMap.<init>()
Esta ca si cum tu ai vrea sa inveti C si pt asta trebuie mai inatai sa inveti cum sa proiectezi compilatorul de C (asa gandeste ea) .

Mihaela daca vrei sa stii ca in spatele HashMap-ului stau combinatii de algortimi precum  Greedy , Divide Et Impera si Programa Dinamica, daca tot vorbim de implementare de colectii.

De curiozitate, poti sa pui aici ce ai "implementat" in java pana acum precum : "Stiva", "Lista", "Cozile" ?
Eu banuiesc ca de fapt ai replicat doar modul cum sunt concepute si redactate insa nu si functionalitatea din spatele lor.  Posted Image

Lista Simplu Inlantuita

public class Node {

private int value;
private Node next;

public Node(int value) {
  this.value = value;
  next = null;
}
public int getValue() {
  return value;
}
public Node getNext() {
  return next;
}
public void setNext(Node next) {
  this.next = next;
}

public void setValue(int value) {
  this.value = value;
}
}


public class ListaSimpla {
private Node head ;
private int size ;

public ListaSimpla() {
head = null;
size = 0;
}

public boolean isEmpty() {
  if (size == 0)
   return true;
  return false;
}
public Node getFirst() {
  return head;
}

public void show() {
  Node n = head;
  if (isEmpty())
   System.out.println("Empty list!!");
  else {
   do {
    System.out.println(n.getValue());
    n = n.getNext();
   } while (n != null);
  }
}
public void addBeforeHead(Node element) {
  if (head == null) {
   head = element;
   size++;
  } else {
   element.setNext(head);
   head = element;
   size++;
  }
}
public void addAfterHead(Node element) {
  if (head == null) {
   head = element;
   size++;
  } else {
   element.setNext(head.getNext());
   head.setNext(element);
   size++;
  }
}
public void removeFirst() {

  try {
   head = head.getNext();
   size--;
  } catch (NullPointerException e) {
   System.out.println("Lista este goala! Nu puteti sterge!");
  }

}

}

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate