Toon posts:

[java] Hashtable: haal key bij value

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi. Misschien een beetje een beginners vraag, maar ja dat ben ik ook :)

Is er een manier om de key die bij een value hoort op te halen uit een hashtable? Met hashtable.get(Object key) doe je het omgekeerde, je haalt de value bij een key, maar omgekeerd kan niet?

Ik heb dit namelijk nodig omdat ik een tweede hashtable heb met dezelfde keys, maar andere values. Dus ik haal eerst uit de ene hashtable de key op die bij een bepaalde waarde hoort en vervolgens haal ik uit de andere hashtable de waarde die weer bij die key hoort.
Of is dit omslachtig en kun je met iets anders als een hashtable wél meerdere values opslaan bij één key?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 29-08 21:30

momania

iPhone 30! Bam!

Even de API reference doorlezen misschien :?

Neem je whisky mee, is het te weinig... *zucht*


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 27-08 12:42
Het probleem waar je hier tegen aan gaat lopen, is dat je niet de garantie hebt de juiste key te krijgen omdat de waarde van de value niet unique hoeven te zijn en de key is wel altijd unique...

Verwijderd

Topicstarter
PhoneTechnician schreef op 05 november 2002 @ 23:16:
Het probleem waar je hier tegen aan gaat lopen, is dat je niet de garantie hebt de juiste key te krijgen omdat de waarde van de value niet unique hoeven te zijn en de key is wel altijd unique...
Ooh ja, daar zit wat in. In mijn geval zijn ze overigens wel uniek, maar ja. Wat is het alternatief dan?

  • johnny7
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Hashtable omdraaien, zodat je values keys worden en keys values worden?
Of even goed beredeneren waarom je twee hashtables nodig hebt?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

PhoneTechnician schreef op 05 november 2002 @ 23:16:
Het probleem waar je hier tegen aan gaat lopen, is dat je niet de garantie hebt de juiste key te krijgen omdat de waarde van de value niet unique hoeven te zijn en de key is wel altijd unique...
Zeker niet. 2 identieke objecten, hebben per defintie dezelfde hashcode, maar 2 verschillende objecten mogen ook dezelfde hashcode hebben. Je kan een hashcode wel gebruiken bij een equals methode om de meeste ongelijke objecten er uit te filteren (moet je de hashkey natuurlijk wel ff cachen), maar verder zul je echt een inhoudelijke equasl moeten verrichten.

De hashcode wordt alleen gebruikt om de bucket te bepalen waar het object in geplaatst moet worden. Als je wilt zou je zelfs een correct functionerende hashkey kunnen maken door altijd bv 1 terug te sturen. Je krijgt wel een ongelovelijk slechte verdeling over je buckets, maar het is wel correct.

Verwijderd

hashen doe je toch zo? Key=Value%HashTableSize. wanneer ie niet past dan gaat ie naar een andere plek toe (dmv de probe) .
Ik denk dat je nooit het voor elkaar krijgt omdat Value de key bepaalt.

*cazzz pakt een groote spuit anti-noob en injecteerd*

[ Voor 0% gewijzigd door Verwijderd op 05-11-2002 23:28 . Reden: Geen dingen doen die ik neit echt kan ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je moet er ook rekening mee houden, dat in die hashtable het key object niet wordt opgenomen. Over dat keyobject wordt een hashcode bepaald, en die wordt gebruikt om de juiste bucket te vinden en de waarde daarin te plaatsen. Daarna kan dat key object weggegooid worden.

Verwijderd

Topicstarter
ok ik denk dat ik het begrijp. Ik denk dat ik in mijn geval iig wel geholpen ben door mijn hashtable om te draaien.
bedankt mensen

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik zit eerlijk gezegd op dit moment even te twijfelen aan mijn laatste uitspraak. Ik ben de hashmap en identityhasmaps nog even aan het doorbladeren. En uit de laatste maak ik op dat de key er wel in wordt opgenomen.

[edit]
Je kan de keys er wel uithalen, dmv keyset(). Hmmzz.. ik begin ouder te worden :P
Pagina: 1