Toon posts:

[Java] Sorteren HashMap -> Vector

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een HashMap met hierin keywords als key's en het aantal keer dat ze gevonden zijn als value (Integer). Nu wil ik echter deze keywords sorteren op

1. value (hoogste eerst)
2. alfabetisch

En vervolgens ze gewoon in een Vector proppen (de value's zijn dan niet interessant meer, worden alleen intern gebruikt voor sorteren)... Dit heb ik werkende overigens, maar misschien dat het makkelijker is om dit direct in de sorteer functie mee te nemen om onnodige overhead te voorkomen).

Ik heb echter geen idee hoe ik dit het beste aan kan pakken... Iemand een hint? (Ik ben geen Java-guru, be gentle :P) Waarom heb Java niet gewoon standaard sort() methods voor iedere list-type??

Verwijderd

Topicstarter
Ben nu met SortedMap aan het kloten... klinkt als iets nuttigs, maar kom er niet echt uit..

Heb ik hier wel wat aan?

Verwijderd

Topicstarter
Ok stapje verder: Ik definieer nu

SortedMap list = new TreeMap();

ipv de gewone Hashmap.. en als magisch staat alles op alfabetische volgorde.. maar nu nog sorteren op key :?

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Vector vec = new Vector(hashMap.keySet());

Collections.sort(vec);

Als het goed is, heb je nu een vector met daarin de keys uit je hashmap, gesorteerd.

https://niels.nu


Verwijderd

Topicstarter
Op woensdag 08 mei 2002 17:18 schreef Hydra het volgende:
Vector vec = new Vector(hashMap.keySet());

Collections.sort(vec);

Als het goed is, heb je nu een vector met daarin de keys uit je hashmap, gesorteerd.
Ja, maar ik wil niet sorteren op keys, maar op value... keys was me ook al gelukt :)

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Op woensdag 08 mei 2002 17:27 schreef Fred_Emmer het volgende:
Ja, maar ik wil niet sorteren op keys, maar op value... keys was me ook al gelukt :)
Ah, scuzes, niet goed gelezen. Misschien een idee zelf een object te maken met daarin de key en value en zelf comparable te implementeren? Da's volgens mij de 'Java-manier' :)

https://niels.nu


Verwijderd

Topicstarter
Op woensdag 08 mei 2002 17:32 schreef Hydra het volgende:

[..]

Ah, scuzes, niet goed gelezen. Misschien een idee zelf een object te maken met daarin de key en value en zelf comparable te implementeren? Da's volgens mij de 'Java-manier' :)
Leek me wat overdone voor sorteren op integer.. maar goed als dat de Java-manier is :P

  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 15-03 16:41
Voor zo ver ik weet is er geen standaard Java class die dit kan. Ik zou het als volgt aanpakken:

- Gebruik 2 SortedMap's, de ene heeft als key de letter en als value het aantal, de andere andersom.
- Zorg dat je op het moment dat je een item aan de ene toevoegt dit ook aan de andere toevoegt zodat de twee Map's in sync blijven.

Je kan natuurlijk zelf een implementatie hiervan maken, noem deze bijv. SortedBidirectionalMap B-)

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 10-07 04:13

PommeFritz

...geen friet

code:
1
2
Collection values=myMapping.values();
Collections.sort(values);

Als je (naam,waarde) paren wilt hebben ipv alleen de values, dan moet je getEntries() gebruiken, die geeft een Set van Map.Entry objecten terug. Als je die wilt sorteren moet je wel zelf een comparator class gebruiken.

FireFox - neem het web in eigen hand


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op woensdag 08 mei 2002 18:21 schreef harry13131 het volgende:
Voor zo ver ik weet is er geen standaard Java class die dit kan. Ik zou het als volgt aanpakken:

- Gebruik 2 SortedMap's, de ene heeft als key de letter en als value het aantal, de andere andersom.
- Zorg dat je op het moment dat je een item aan de ene toevoegt dit ook aan de andere toevoegt zodat de twee Map's in sync blijven.

Je kan natuurlijk zelf een implementatie hiervan maken, noem deze bijv. SortedBidirectionalMap B-)
Als ik kijk naar waarvoor die het gebruikt zijn de values niet uniek en kun je daar dus geen keys van maken. Tenzij die als key het aantal gebruikt en als value bijvoorbeeld een Vector met de keywords. In dat geval kun je makkelijk beide sorteren zonder comparator.

Maar de normale manier hiervoor is inderdaad gewoon Comparator implementeren. Als je verder wilt in Java zul je die principes toch goed onder de knie moeten hebben.

  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 15-03 16:41
Op donderdag 09 mei 2002 22:49 schreef Bosmonster het volgende:

[..]

Als ik kijk naar waarvoor die het gebruikt zijn de values niet uniek en kun je daar dus geen keys van maken. Tenzij die als key het aantal gebruikt en als value bijvoorbeeld een Vector met de keywords. In dat geval kun je makkelijk beide sorteren zonder comparator.

Maar de normale manier hiervoor is inderdaad gewoon Comparator implementeren. Als je verder wilt in Java zul je die principes toch goed onder de knie moeten hebben.
Da's waar ja..
De Comparator implementeren is idd. de juiste optie, zeker als er meer 'velden' komen waar je ook op zou willen sorteren.
Pagina: 1