import java.util.*; class VaarArrayList implements Iterable, Comparable{ Node start; //Sammenligner en liste med en annen. @Override public int compareTo(Object annenListe){ VaarArrayList liste = (VaarArrayList) annenListe; if(toString().equals(annenListe.toString())){ return 0; } else{ return toString().length() - annenListe.toString().length(); } } //Hentet et objekt ut basert paa index public T hent(int pos){ Node peker = start; int teller = pos; while(teller > 0){ if(peker.neste == null){ throw new FeilIndexException("Index " + pos + " er for stor for denne listen."); } peker = peker.neste; teller--; } return peker.data; } //Setter inn i slutten av listen. public void settInn(T d){ Node n = new Node(d); //Dersom listen er tom kan vi bare putte den paa starten. if(start == null){ start = n; } else{ Node peker = start; while(peker.neste != null){ peker = peker.neste; } peker.settNeste(n); } } //Setter inn basert paa index public void settInn(T d, int p){ Node n = new Node(d); if(p == 0){ Node tmp = start; start = n; n.settNeste(tmp); } else{ int teller = p; Node peker = start; while(teller > 0){ if(peker.neste == null){ throw new FeilIndexException("Feil index"); } peker = peker.neste; teller--; } peker.settNeste(n); } } //Returnerer hele listen som en string @Override public String toString(){ String str = ""; Node peker = start; while(peker != null){ str = str + " " + peker; peker = peker.neste; } return str; } //Indre node klasse class Node{ Node neste; T data; public Node(T d){ data = d; } public void settNeste(Node n){ if(neste == null){ neste = n; } else{ Node tmp = neste; neste = n; n.neste = tmp; } } @Override public String toString(){ return "" + data; } } //Lager en iterator og returnerer den (brukes av java. F.eks. i en for-each loekke) @Override public Iterator iterator(){ return new VaarIterator(); } //Indre iterator klasse. Grensesnittet krever to metoder class VaarIterator implements Iterator{ Node peker = start; @Override public T next(){ Node tmp = peker; peker = peker.neste; return tmp.data; } @Override public boolean hasNext(){ return peker != null; } } }