hei kaikki,
ohessa koodi, jossa yritän toteuttaa collection ja iterator rajapintoja taulukon avulla. Voisitteko tsekata näyttääkö kaikki ok, ja olisiko ehdotuksia miten saisin nuo 4 kohtaa vielä toimimaan, joissa ei ole koodia...
import java.util.*; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Taulukko<TYPE> implements Collection<TYPE> { public int alkuperainenKoko; public TYPE alkiot[]; public int alkioita = 0; public int it = -1; private void kasvataTaulukko() { TYPE[] tmp = (TYPE[]) new Alkio[alkiot.length + 5]; System.arraycopy(alkiot, 0, tmp, 0, alkiot.length); alkiot = tmp; } public int size() { return alkioita; } public boolean isEmpty() { return alkioita == 0; } public boolean contains(Object o) { for(Iterator<TYPE> i = iterator(); i.hasNext();) if(i.next() == o) return true; return false; } public Iterator<TYPE> iterator() { return new Iteraattori<TYPE>(); } public Object[] toArray(TYPE elements) { Set set = new HashSet(Arrays.asList(elements)); Object[] strObj = new Object[set.size()]; strObj = (Object[]) set.toArray(strObj); return strObj; } public <T> T[] toArray(T[] a) { throw new UnsupportedOperationException("Not supported yet."); } public boolean add(TYPE e) { for (int i = 0; i < alkiot.length; i++) { if (alkiot[i] == null) { alkiot[i] = e; alkioita++; return true; } } kasvataTaulukko(); return add(e); } public boolean remove(Object o) { for(Iterator<TYPE> i = this.iterator(); i.hasNext();) { if((Alkio) i.next() == o) { i.remove(); return true; } } return false; } public boolean containsAll(Collection<?> c) { for(Iterator<TYPE> i = (Iterator<TYPE>) c.iterator(); i.hasNext();) if(!contains(i.next())) return false; return true; } public boolean addAll(Collection<? extends TYPE> c) { throw new UnsupportedOperationException("Not supported yet."); } public boolean removeAll(Collection<?> c) { boolean virheita = false; for(Iterator<TYPE> i = (Iterator<TYPE>) c.iterator(); i.hasNext();) if(!remove(i.next())) virheita = true; return !virheita; } public boolean retainAll(Collection<?> c) { throw new UnsupportedOperationException("Not supported yet."); } public void clear() { alkiot = (TYPE[]) new Alkio[alkuperainenKoko]; alkioita = 0; } public Object[] toArray() { throw new UnsupportedOperationException("Not supported yet."); } public class Iteraattori<TYPE> implements Iterator<TYPE>{ public boolean hasNext() { if(it < alkioita) return true; return false; } public TYPE next() { return (TYPE) alkiot[++it]; } public void remove() { alkiot[it] = alkiot[--alkioita]; alkiot[alkioita] = null; } } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.