Java: Iterator (java.util.Iterator)

Permalänk
Medlem

Java: Iterator (java.util.Iterator)

Hejsan.

Jag undrar ifall någon kan förklara för mig hur en Iterator(Java.util.Iterator) i Java fungerar?
Och gärna ge något relevant exempel för mer förståelse?

MvH Jesper

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem
Skrivet av Kreppe:

Hejsan.

Jag undrar ifall någon kan förklara för mig hur en Iterator(Java.util.Iterator) i Java fungerar?
Och gärna ge något relevant exempel för mer förståelse?

MvH Jesper

Kolla dokumentationen och läs på om datastrukturer i allmänhet, typ länkade listor, träd etc så ser du var de är bra att ha...

men en kort förklaring OBS, inte javasyntax specifikt

länkad lista med integers i
om ett element ser ut såhär, dvs ett heltal och en pekare till nästa element(null om slut på listan)
[2] ->
eller
[7] null

listan kan då se ut
[2] -> [1] ->[6] ->[5] null

iteratorn är då en pekare till nästa element(även föregående i vissa fall) och man brukar säga att den är "mellan" elementen. Om iteratorn är "it"
-----it
[2] -> [1] ->[6] ->[5] null

it.hasnext == true
it.next == 1
it.prev == 2

sedan efter acces så hoppar den fram till nästa och byter ut sin referens till next och prev

i mer komplicerade fall med träd så får man välja lite hur den implementeras, om den går höger eller vänster först etc

hur den används är lättare om du hittar exempel...

och dessutom så föreslår jag att du använder foreach-loop när du använder den...
dvs.

Lista siffror = new Lista();
siffor.add(2);siffror.add(5);

for(int siffra : siffror){
siffra.print();
}

Permalänk
Medlem

Hm.. Så att iterera över alla objekt är som att loopa över dem?

När man skriver ex:
ArrayList<hej> tjena = new ArrayList<hej>();
Iterator<hej> hejsan;

för att sedan längre ner i koden tilldela:
hejsan = tjena.iterator();

Fungerar Iterator<hej> på samma sätt som en ArrayList, att man itererar(loopar) över alla objekt och tilldelar
dessa i någon slags Array?

tack på förhand gothxx.
MvH Jesper.

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem

Kommer inte riktigt ihåg hur iteratorer fungerar i just Java, men generellt sett så används iteratorer för att ge ett gemensamt gränssnitt mot olika mängder (listor, grafer etc., egentligen allt som lagrar flera element). Istället för att skriva t.ex.

for (int i = 0; i < list.size(); i++) print(list.get(i));

använder man istället en iterator och något i stil med

while (iter.hasNext()) print(iter.next());

Med for-loopen så bygger det på att det finns en size() och en get() metod i list-objektet, medans med en iterator så krävs enbart att objektet har implementerat iteratorn korrekt. Hur list-objektet sedan fungerar spelar ingen roll. Har man t.ex. ett binärträd skulle man kunna skapa tre olika iteratorer för att traversera trädet i pre-, post- eller in-order, och då endast behöva ändra typen på iteratorn. Du använder forfarande bara hasNext() och next() på iteratorn. Utan en iterator skulle du potentiellt behöva ändra betydligt mer.

Permalänk
Medlem
Skrivet av Kreppe:

Hm.. Så att iterera över alla objekt är som att loopa över dem?

Ja, att iterera över saker är precis samma sak som att loopa över dem.

Skrivet av Kreppe:

Fungerar Iterator<hej> på samma sätt som en ArrayList, att man itererar(loopar) över alla objekt och tilldelar
dessa i någon slags Array?

Jag är inte säker på vad du menar här...
Men syftet är iaf att få åtkomst till alla objekt i en Collection, i en bestämd ordning, en efter en.

Det används till exempel är du skriver foor-loopar av denna typ:

for (String s : arrayListOfStrings) { System.out.println(s); }