package java.util; /** * Title: * Description: * Copyright: Copyright (c) 2001 * Company: * @version 1.0 */ public abstract class AbstractList extends AbstractCollection implements List { protected AbstractList al = this; protected AbstractList() { } public boolean add(Object o) throws UnsupportedOperationException, ClassCastException, IllegalArgumentException { try { add(size(),o); return true; } catch(UnsupportedOperationException ue) { throw ue; } } public abstract Object get(int index) throws IndexOutOfBoundsException; public Object set(int index,Object element) throws UnsupportedOperationException, ClassCastException, IllegalArgumentException, IndexOutOfBoundsException { throw new UnsupportedOperationException(); } public void add(int index,Object element) throws UnsupportedOperationException, ClassCastException, IllegalArgumentException, IndexOutOfBoundsException { throw new UnsupportedOperationException(); } public Object remove(int index) throws UnsupportedOperationException, IndexOutOfBoundsException { Object o = get(index); removeRange(index,index+1); return o; } public int indexOf(Object o) { ListIterator li = listIterator(); Object e; while(li.hasNext()) { int index=li.nextIndex(); e=li.next(); System.out.println(e); if(o==null) { if(e==null) return index; } else { if(o.equals(e)) return index; } } return -1; } public int lastIndexOf(Object o) { ListIterator li=listIterator(size()); while(li.hasPrevious()) { int index=li.previousIndex(); Object e=li.previous(); if(o==null) { if(e==null) return index; } else { if(o.equals(e)) return index; } } return -1; } public void clear() throws UnsupportedOperationException { try { removeRange(0,size()); } catch(UnsupportedOperationException ue) { throw ue; } } public boolean addAll(int index,Collection c) throws UnsupportedOperationException, ClassCastException, IllegalArgumentException, IndexOutOfBoundsException { Iterator it=c.iterator(); boolean ret=false; while(it.hasNext()) { try { add(index++,it.next()); ret=true; } catch(UnsupportedOperationException ue) { throw ue; } } return ret; } public Iterator iterator() { return new AbstractListIterator(this,0); } public ListIterator listIterator() { return listIterator(0); } public ListIterator listIterator(int index) throws IndexOutOfBoundsException { if(index<0||index>size()) throw new IndexOutOfBoundsException(); return new AbstractListListIterator(this,index); } public List subList(int fromIndex,int toIndex) throws IndexOutOfBoundsException,IllegalArgumentException { if(fromIndex < 0 || toIndex > size()) throw new IndexOutOfBoundsException(); if(fromIndex>toIndex) throw new IllegalArgumentException(); return (List) new Sublist(this,fromIndex,toIndex); } public boolean equals(Object o) { if(o==this) return true; if(!(o instanceof List)) return false; Iterator it1=iterator(); Iterator it2=((List)o).iterator(); while(it1.hasNext()) { if(!it2.hasNext()) return false; Object e1=it1.next(); Object e2=it2.next(); if(e1==null) { if(e2!=null) return false; } if(!e1.equals(e2)) return false; } return true; } public int hashCode() { int hashCode = 1; Iterator it = iterator(); while (it.hasNext()) { Object o = it.next(); hashCode = 31*hashCode + (o==null ? 0 : o.hashCode()); } return hashCode; } protected void removeRange(int fromIndex,int toIndex) { System.out.println("breakpoint 1"); if(fromIndex==toIndex) return; System.out.println("breakpoint 2"); ListIterator li=listIterator(fromIndex); System.out.println("breakpoint 3"); int i=fromIndex; do { li.next(); li.remove(); i++; }while(li.hasNext()&&i<toIndex); } //////////////////////////////////////////////////////////// /////////////innere Klasse AbstractIterator///////////////// //////////////////////////////////////////////////////////// private class AbstractListIterator implements Iterator { AbstractList m_al=null; int m_nextIndex=0; public AbstractListIterator(AbstractList al,int index) { m_al=al; m_nextIndex=index; } public boolean hasNext() { return m_nextIndex < m_al.size(); } public Object next() { return m_al.get(m_nextIndex++); } public void remove() { m_al.remove(m_nextIndex - 1); } } /////////////////////////////////////////////////////////////////////////////// //////////// innere Klasse AbstraktListListIterator /////////////////////////////////////////////////////////////////////////////// private class AbstractListListIterator extends AbstractListIterator implements ListIterator { public AbstractListListIterator(AbstractList al,int index) { super(al,index); } public boolean hasPrevious() { return m_nextIndex>0; } public Object previous()// throws NoSuchElementException; { return m_al.get(--m_nextIndex); } public int nextIndex() { return m_nextIndex; } public int previousIndex() { return m_nextIndex-1; } public void set(Object o) //throws UnsupportedOperationException, ClassCastException, IllegalArgumentException,IllegalStateException; { m_al.set(m_nextIndex-1,o); } public void add(Object o)// throws UnsupportedOperationException, ClassCastException, IllegalArgumentException; { m_al.add(m_nextIndex-1,o); } } }