Archief - java collections

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mikey_1

Legacy Member
hallo


betreffende collections:

hoe kan je weten wanneer je HashSet, treeSet, LinkedList,.. moet gebruiken?

of kan je ze alledrie altijd gebruiken?

Mikey_1

Legacy Member
hallo

srry voor het late reply.

ik versta de structuur. de List - en Set structuur
ben momenteel wat aan het oefenen.


er bestaan 3 mogelijkheden om het te doorlopen.

de for loop
-for (int i = 0 ; i < lijst.size() ; i++){
......
}

de for each loop
for (Object obj : lijst)
String woord = (String) obj;
system.out.println(woord);

en de iterator
for (Iterator i = lijqt.iterator'(); i.hasnext(); )
String woord= (String) i.next();
system.out.println(woord);


welke van de 3 is het beste?
welk voordeel heeft de ene vgl met de andere?

Fraggie

Legacy Member
Mikey_1 zei:
welke van de 3 is het beste?
welk voordeel heeft de ene vgl met de andere?
In wezen heb je er maar twee opgegeven.

Ofwel wil je over data lopen en deze mogelijks aanpassen (for loop en met indexen werken), ofwel wil je gewoon over data lopen (iterator).

NeverwinterX

Legacy Member
Mikey_1 zei:
hallo

srry voor het late reply.

ik versta de structuur. de List - en Set structuur
ben momenteel wat aan het oefenen.


er bestaan 3 mogelijkheden om het te doorlopen.

de for loop
-for (int i = 0 ; i < lijst.size() ; i++){
......
}

de for each loop
for (Object obj : lijst)
String woord = (String) obj;
system.out.println(woord);

en de iterator
for (Iterator i = lijqt.iterator'(); i.hasnext(); )
String woord= (String) i.next();
system.out.println(woord);


welke van de 3 is het beste?
welk voordeel heeft de ene vgl met de andere?

De VM vertaalt optie 2 achterliggend naar optie 3. Optie 3 hoef je dus praktisch nooit te gebruiken (met een recente Java).
Optie 1 hoef je enkel te gebruiken als je per se de indexen nodig hebt.
En merk op dat als je optie 1 gebruikt met een LinkedList en je gebruikt de get(index) methode dat dat dan onnoemelijk veel trager is dan optie 2/3 vanwege de karakteristieken van een linkedlist.
Optie 1 is dan weer een tikkeltje sneller bij ArrayList en een array.

Vin

Legacy Member
HashSet: Gebruikt een hashtabel.
- Zoeken, toevoegen en verwijderen in gemiddeld O(1), worst case O(n)
- Houdt de elementen in random volgorde bij

TreeSet: Gebruikt een binaire zoekboom (rood-zwart boom zelfs dacht ik) achter de schermen.
- Zoeken, toevoegen en verwijderen in alle gevallen O(lg(n))
- Elementen gesorteerd

LinkedList: Zoals de naam zegt: een gelinkte lijst
- Zoeken is O(n)
- Toevoegen is O(1)
- Verwijderen (na zoeken) is ook O(1)
Elementen zitten in de volgorde die je zelf opgeeft, je kan eenvoudig elementen tussenvoegen.

Afhankelijk van wat je net wil bereiken heeft elke implementatie zijn voor- en nadelen. De keuze van de juiste datastructuur kan heel sterk de performantie van je programma beinvloeden.

Mikey_1

Legacy Member
één de mogelijkheden om af te ronden tot 2 cijfers na de komma is

("%.2f") iemand meer info hierover?

wat is het verschil met "rounding"

Nepherte

Legacy Member
Met jaar, maand en dag had je toch in staat moeten zijn om comparable te implementen. Je weet hoeveel dagen er in een maand zitten en hoeveel er in een jaar zitten...je telt alles op en je vergelijkt....

En waarom hou je alles bij in functie van dagen/maanden/jaren en niet rechtstreeks met Date? Zo hoef je zelf geen rekening meer te houden met ongeldige data (28, 29, 30 of 31 dagen in een maand, ...) en kan je veel gemakkelijker tussen verschillende formaten converteren.

Mikey_1

Legacy Member
bedankt voor je antwoord.


ik ben nog maar een beginneling.


maar hoe ik dit converteren (int jaar, int maand, int dag) naar date()?

passero

Legacy Member
Of als ge ze wilt vergelijken kunt ge uw jaar, maand en dag samenvoegen in een int in formaat yyyymmd. Vandaag is groter dan gisteren.

Voorbeeld: 24/04/2012 wordt dan 20120424 is kleiner dan 20120425 en groter dan 20120423

Zo kan je dus ook vergelijken...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan