[Java]Hashtable, Vector, Array of iets anders?

Pagina: 1
Acties:

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
Wat ik wil is het volgende een Array die netzo werkt als een vector dus zo, dat ik niet van tevoren hoef in te stellen hoe groot hij is. Maar ik heb dus wel een variable en een value nodig zoals bij een Hastable. Alleen kan je niet met een loop door een hastable lopen:
code:
1
2
3
for(int i=0;i<hastable.size();i++){
     String iets = hastable.getString(i);
}

dit kan dus niet?

Hoe los ik dit probleem op.

http://www.slobmotorsport.nl - iRacing Profiel


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Wat bedoel je met 'ik heb een variable en een value nodig'?
Wil je dan in 1 entry 2 waarden toekennen?

Dan kun je toch een class maken:
code:
1
2
3
4
5
class Item
{
   int  key;
   string text;
}

En dan instances van Item aan een vector toekennen?

https://fgheysels.github.io/


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

Alarmnummer

-= Tja =-

the_Emperor schreef op 28 oktober 2002 @ 16:33:
Wat ik wil is het volgende een Array die netzo werkt als een vector dus zo, dat ik niet van tevoren hoef in te stellen hoe groot hij is. Maar ik heb dus wel een variable en een value nodig zoals bij een Hastable. Alleen kan je niet met een loop door een hastable lopen:
code:
1
2
3
for(int i=0;i<hastable.size();i++){
     String iets = hastable.getString(i);
}

dit kan dus niet?

Hoe los ik dit probleem op.
Als de volgorde waarin die elementen in de hashtable zijn geplaatst niet uitmaakt, dan kun je het volgende zeggen:

code:
1
2
3
4
for(Iterator itt=hashtable.values().iterator();itt.hasNext();){
   Blaat b = (Blaat)itt.next();
   ...
}


Als de volgorde wel uitmaakt, dan moet je even kijken naar de LinkedHashmap

Trouwens je doet er verstandig aan een andere class niet verantwoordelijk te laten zijn voor de vorm van een iteratie. Als class A een List achtige structuur heeft, dan heeft class B daar vaak niets mee te maken. Als dan in B die list bijlangsgaat van A, dan heb je dus een koppeling tussen B en A (B weet tenminste iets van A). Als jij later een Hash structuur wilt gebruiken ipv een List in A, dan heb je een groot probleem omdat je in B dus bent uitgegaan van een List.

Daarom moet je dus gaan ontkoppelen via een Iterator. Aangezien iedere structuur uit de colection framework een iterator kan terug sturen, kan je er altijd mee uit de voeten.

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
whoami schreef op 28 oktober 2002 @ 16:37:
Wat bedoel je met 'ik heb een variable en een value nodig'?
Wil je dan in 1 entry 2 waarden toekennen?

Dan kun je toch een class maken:
code:
1
2
3
4
5
class Item
{
   int  key;
   string text;
}

En dan instances van Item aan een vector toekennen?
ok dit snap ik en dat moet ook wel gaan werken volgens mij bedankt.
Alarmnummer schreef op 28 oktober 2002 @ 16:40:
[...]


Als de volgorde waarin die elementen in de hashtable zijn geplaatst niet uitmaakt, dan kun je het volgende zeggen:

code:
1
2
3
4
for(Iterator itt=hashtable.values().iterator();itt.hasNext();){
   Blaat b = (Blaat)itt.next();
   ...
}


Als de volgorde wel uitmaakt, dan moet je even kijken naar de LinkedHashmap

Trouwens je doet er verstandig aan een andere class niet verantwoordelijk te laten zijn voor de vorm van een iteratie. Als class A een List achtige structuur heeft, dan heeft class B daar vaak niets mee te maken. Als dan in B die list bijlangsgaat van A, dan heb je dus een koppeling tussen B en A (B weet tenminste iets van A). Als jij later een Hash structuur wilt gebruiken ipv een List in A, dan heb je een groot probleem omdat je in B dus bent uitgegaan van een List.

Daarom moet je dus gaan ontkoppelen via een Iterator. Aangezien iedere structuur uit de colection framework een iterator kan terug sturen, kan je er altijd mee uit de voeten.
deze is kwa uitleg een stuk ingewikkelder en ik snap eigenlijk de helft ook niet, maar de volgorde maakt idd niet uit. En ik heb eigenlijk nog nooit zo'n for lus gezien, er staat daar dus eigenlijk
code:
1
for(Iterator itt = 10;itt.hasNext();){}

en die gaat net zo lang door tot hij 10 keer next heeft gedaan ?

ennuh wat is een Iterator?

iig bedankt.

edit: moet die for lus geen while lus zijn?

http://www.slobmotorsport.nl - iRacing Profiel


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

the_Emperor schreef op 28 oktober 2002 @ 17:01:
deze is kwa uitleg een stuk ingewikkelder en ik snap eigenlijk de helft ook niet, maar de volgorde idd niet uit. En ik heb eigenlijk nog nooit zo'n for lus gezien, er staat daar dus eigenlijk
code:
1
for(Iterator itt = 10;itt.hasNext();){}

en die gaat net zo lang door tot hij 10 keer next heeft gedaan ?
Euh, nee, dit is een ietwat cryptische for-lus.

Een for-loop bestaat uit 4 delen:
code:
1
2
for ( 1; 2; 3 ) 
  4

Waarbij de nummertjes zijn:
  1. Expressie wordt bij initialisatie van de loop ge-evalueerd
  2. Expressie moet elke iteratie true evalueren
  3. Moet elke iteratie uitgevoerd worden
  4. Het statement wat de body van de loop is
Als je dat even goed naast de for-loop van Alarmnummer zet, zal je zien dat 't niet zo lastig is als het lijkt :)
ennuh wat is een Iterator?

Een iterator is een hulpstuk bij het doorlopen van list-achtige objecten, waarbij
Iterator.hasNext () aangeeft of er nog "volgende" elementen zijn
Iterator.next () het "volgende" element in de list teruggeeft

* drm weet niet precies waar de Iterator thuishoort in de object-structuur van java, dus dat mag iemand anders zeggen :)

edit:
edit: moet die for lus geen while lus zijn?
* drm denkt dat Alarmnummer taalpurist is ;)
een for-loop gebruiken wanneer er iterator-achtige dingen involved zijn... Hij kan 't waarschijnlijk zelf beter uitleggen

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


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

Alarmnummer

-= Tja =-

Je kunt een Iterator vertalen met een 'bijlangsloper' Je vraagt aan een hashmap zijn waarden (dus hashmap.values()) of je daar een bijlangsloper van mag. En die bijlangsloper heeft 2 methodes:
heb je nog meer? (hasNext)
geef de waarde waar je nu opstaat, en ga naar de volgende. (next)

En dat kan je in een forlus stoppen. En verder zou ik hier dus geen List structuur gebruiken, omdat de volgende irrelevant is en je kan zoeken op basis van een key. Hiervoor kan je perfect een hash structuur gebruiken. Je moet er trouwens wel voor zorgen dat die int die je hebt, om gaat zetten naar een Integer, omdat alleen objecten als key kunnen functioneren.

dus:

hashmap.put(new Integer(key),waarde);

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

Alarmnummer

-= Tja =-

* drm denkt dat Alarmnummer taalpurist is
Het gaat niet zozeer om de structuur die behandeld wordt, maar over het aantal iteraties dat je gaat ondernemen. Als je bij een List gaat itereren, en je gaat ze allemaal bijlang, dan een for lus en anders een while lus. Maar ik moet ook toegeven dat ik intussen ook forlussen gebruik met een return >:)

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
maar kan je dan niet i.p.v. die for lus een while lus gebruiken:
code:
1
2
3
4
Iterator itt=hastable.values().iterator();
while(itt.hasNext()){
      doeiets();
}

of zie ik dat verkeerd?

http://www.slobmotorsport.nl - iRacing Profiel


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

dat zie je goed. Vergeet alleen de itt.next () niet, magoed :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
eeeeeuh kan ik i.p.v. values ook keys doen
dus:
code:
1
Iterator itt=hastable.keys().iterator();

dit werkt dus niet.

http://www.slobmotorsport.nl - iRacing Profiel


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

Alarmnummer

-= Tja =-

Ik adviseer je om even door de api te kijken. En om je een beetje te helpen: het lijkt veel op keyzet ;)

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07
Alarmnummer schreef op 28 oktober 2002 @ 17:30:
Ik adviseer je om even door de api te kijken. En om je een beetje te helpen: het lijkt veel op keyzet ;)
hehe tnx ik had het al gevonden srry het word iets te makkelijk om vraagjes te stellen.

http://www.slobmotorsport.nl - iRacing Profiel

Pagina: 1