一、前言
关于cayenne包中org.apache.commons.collections.FastArrayList自定义序列,继承java.util.ArrayList的同时,对多线程并发访问进行控制及性能做相关优化,因此该序列是多线程安全的。
二、源码说明
package org.apache.commons.collections;@b@@b@import java.util.AbstractCollection;@b@import java.util.AbstractList;@b@import java.util.ArrayList;@b@import java.util.Collection;@b@import java.util.ConcurrentModificationException;@b@import java.util.Iterator;@b@import java.util.List;@b@import java.util.ListIterator;@b@@b@public class FastArrayList extends ArrayList@b@{@b@ protected ArrayList list = null;@b@ protected boolean fast = false;@b@@b@ public FastArrayList()@b@ {@b@ this.list = new ArrayList();@b@ }@b@@b@ public FastArrayList(int capacity)@b@ {@b@ this.list = new ArrayList(capacity);@b@ }@b@@b@ public FastArrayList(Collection collection)@b@ {@b@ this.list = new ArrayList(collection);@b@ }@b@@b@ public boolean getFast()@b@ {@b@ return this.fast;@b@ }@b@@b@ public void setFast(boolean fast)@b@ {@b@ this.fast = fast;@b@ }@b@@b@ public boolean add(Object element)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.add(element);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.add(element);@b@ }@b@ }@b@@b@ public void add(int index, Object element)@b@ {@b@ if (this.fast)@b@ synchronized (this) {@b@ ArrayList temp = (ArrayList)this.list.clone();@b@ temp.add(index, element);@b@ this.list = temp;@b@ }@b@@b@ synchronized (this.list) {@b@ this.list.add(index, element);@b@ }@b@ }@b@@b@ public boolean addAll(Collection collection)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.addAll(collection);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.addAll(collection);@b@ }@b@ }@b@@b@ public boolean addAll(int index, Collection collection)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.addAll(index, collection);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.addAll(index, collection);@b@ }@b@ }@b@@b@ public void clear()@b@ {@b@ if (this.fast)@b@ synchronized (this) {@b@ ArrayList temp = (ArrayList)this.list.clone();@b@ temp.clear();@b@ this.list = temp;@b@ }@b@@b@ synchronized (this.list) {@b@ this.list.clear();@b@ }@b@ }@b@@b@ public Object clone()@b@ {@b@ FastArrayList results = null;@b@ if (this.fast)@b@ results = new FastArrayList(this.list);@b@ else@b@ synchronized (this.list) {@b@ results = new FastArrayList(this.list);@b@ }@b@@b@ results.setFast(getFast());@b@ return results;@b@ }@b@@b@ public boolean contains(Object element)@b@ {@b@ if (this.fast)@b@ return this.list.contains(element);@b@@b@ synchronized (this.list) {@b@ return this.list.contains(element);@b@ }@b@ }@b@@b@ public boolean containsAll(Collection collection)@b@ {@b@ if (this.fast)@b@ return this.list.containsAll(collection);@b@@b@ synchronized (this.list) {@b@ return this.list.containsAll(collection);@b@ }@b@ }@b@@b@ public void ensureCapacity(int capacity)@b@ {@b@ if (this.fast)@b@ synchronized (this) {@b@ ArrayList temp = (ArrayList)this.list.clone();@b@ temp.ensureCapacity(capacity);@b@ this.list = temp;@b@ }@b@@b@ synchronized (this.list) {@b@ this.list.ensureCapacity(capacity);@b@ }@b@ }@b@@b@ public boolean equals(Object o)@b@ {@b@ if (o == this)@b@ return true;@b@ if (!(o instanceof List))@b@ return false;@b@ List lo = (List)o;@b@@b@ if (this.fast) {@b@ ??? = this.list.listIterator();@b@ ListIterator li2 = lo.listIterator();@b@ while ((???.hasNext()) && (li2.hasNext())) {@b@ Object o1 = ???.next();@b@ Object o2 = li2.next();@b@ if (!(((o1 == null) ? false : (o2 == null) ? true : o1.equals(o2))))@b@ return false;@b@ }@b@ return ((!(???.hasNext())) && (!(li2.hasNext())));@b@ }@b@ synchronized (this.list) {@b@ Object o1;@b@ ListIterator li1 = this.list.listIterator();@b@ ListIterator li2 = lo.listIterator();@b@ while ((li1.hasNext()) && (li2.hasNext())) {@b@ o1 = li1.next();@b@ Object o2 = li2.next();@b@ if (!(((o1 == null) ? false : (o2 == null) ? true : o1.equals(o2)))) {@b@ int i;@b@ return 0; }@b@ }@b@ return (((!(li1.hasNext())) && (!(li2.hasNext()))) ? 1 : 0);@b@ }@b@ }@b@@b@ public Object get(int index)@b@ {@b@ if (this.fast)@b@ return this.list.get(index);@b@@b@ synchronized (this.list) {@b@ return this.list.get(index);@b@ }@b@ }@b@@b@ public int hashCode()@b@ {@b@ if (this.fast) {@b@ ??? = 1;@b@ Iterator i = this.list.iterator();@b@ while (i.hasNext()) {@b@ Object o = i.next();@b@ ??? = 31 * ??? + ((o == null) ? 0 : o.hashCode());@b@ }@b@ return ???;@b@ }@b@ synchronized (this.list) {@b@ Object o;@b@ int hashCode = 1;@b@ Iterator i = this.list.iterator();@b@ while (i.hasNext()) {@b@ o = i.next();@b@ hashCode = 31 * hashCode + ((o == null) ? 0 : o.hashCode());@b@ }@b@ return hashCode;@b@ }@b@ }@b@@b@ public int indexOf(Object element)@b@ {@b@ if (this.fast)@b@ return this.list.indexOf(element);@b@@b@ synchronized (this.list) {@b@ return this.list.indexOf(element);@b@ }@b@ }@b@@b@ public boolean isEmpty()@b@ {@b@ if (this.fast)@b@ return this.list.isEmpty();@b@@b@ synchronized (this.list) {@b@ return this.list.isEmpty();@b@ }@b@ }@b@@b@ public Iterator iterator()@b@ {@b@ if (this.fast)@b@ return new ListIter(this, 0);@b@@b@ return this.list.iterator();@b@ }@b@@b@ public int lastIndexOf(Object element)@b@ {@b@ if (this.fast)@b@ return this.list.lastIndexOf(element);@b@@b@ synchronized (this.list) {@b@ return this.list.lastIndexOf(element);@b@ }@b@ }@b@@b@ public ListIterator listIterator()@b@ {@b@ if (this.fast)@b@ return new ListIter(this, 0);@b@@b@ return this.list.listIterator();@b@ }@b@@b@ public ListIterator listIterator(int index)@b@ {@b@ if (this.fast)@b@ return new ListIter(this, index);@b@@b@ return this.list.listIterator(index);@b@ }@b@@b@ public Object remove(int index)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ Object localObject2;@b@ temp = (ArrayList)this.list.clone();@b@ Object result = temp.remove(index);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.remove(index);@b@ }@b@ }@b@@b@ public boolean remove(Object element)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.remove(element);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.remove(element);@b@ }@b@ }@b@@b@ public boolean removeAll(Collection collection)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.removeAll(collection);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.removeAll(collection);@b@ }@b@ }@b@@b@ public boolean retainAll(Collection collection)@b@ {@b@ ArrayList temp;@b@ if (this.fast)@b@ synchronized (this) {@b@ boolean bool1;@b@ temp = (ArrayList)this.list.clone();@b@ boolean result = temp.retainAll(collection);@b@ this.list = temp;@b@ return result;@b@ }@b@@b@ synchronized (this.list) {@b@ return this.list.retainAll(collection);@b@ }@b@ }@b@@b@ public Object set(int index, Object element)@b@ {@b@ if (this.fast)@b@ return this.list.set(index, element);@b@@b@ synchronized (this.list) {@b@ Object localObject1;@b@ return this.list.set(index, element);@b@ }@b@ }@b@@b@ public int size()@b@ {@b@ if (this.fast)@b@ return this.list.size();@b@@b@ synchronized (this.list) {@b@ return this.list.size();@b@ }@b@ }@b@@b@ public List subList(int fromIndex, int toIndex)@b@ {@b@ if (this.fast)@b@ return new SubList(this, fromIndex, toIndex);@b@@b@ return this.list.subList(fromIndex, toIndex);@b@ }@b@@b@ public Object[] toArray()@b@ {@b@ if (this.fast)@b@ return this.list.toArray();@b@@b@ synchronized (this.list) {@b@ return this.list.toArray();@b@ }@b@ }@b@@b@ public Object[] toArray(Object[] array)@b@ {@b@ if (this.fast)@b@ return this.list.toArray(array);@b@@b@ synchronized (this.list) {@b@ return this.list.toArray(array);@b@ }@b@ }@b@@b@ public String toString()@b@ {@b@ StringBuffer sb = new StringBuffer("FastArrayList[");@b@ sb.append(this.list.toString());@b@ sb.append("]");@b@ return sb.toString();@b@ }@b@@b@ public void trimToSize()@b@ {@b@ if (this.fast)@b@ synchronized (this) {@b@ ArrayList temp = (ArrayList)this.list.clone();@b@ temp.trimToSize();@b@ this.list = temp;@b@ }@b@@b@ synchronized (this.list) {@b@ this.list.trimToSize();@b@ }@b@ }@b@@b@ private class ListIter@b@ implements ListIterator@b@ {@b@ private List expected;@b@ private ListIterator iter;@b@ private int lastReturnedIndex;@b@ private final FastArrayList this$0;@b@@b@ public ListIter(, int i)@b@ {@b@ this.this$0 = this$0;@b@@b@ this.lastReturnedIndex = -1;@b@@b@ this.expected = this$0.list;@b@ this.iter = get().listIterator(i);@b@ }@b@@b@ private void checkMod() {@b@ if (this.this$0.list != this.expected)@b@ throw new ConcurrentModificationException();@b@ }@b@@b@ List get()@b@ {@b@ return this.expected;@b@ }@b@@b@ public boolean hasNext() {@b@ checkMod();@b@ return this.iter.hasNext();@b@ }@b@@b@ public Object next() {@b@ checkMod();@b@ this.lastReturnedIndex = this.iter.nextIndex();@b@ return this.iter.next();@b@ }@b@@b@ public boolean hasPrevious() {@b@ checkMod();@b@ return this.iter.hasPrevious();@b@ }@b@@b@ public Object previous() {@b@ checkMod();@b@ this.lastReturnedIndex = this.iter.previousIndex();@b@ return this.iter.previous();@b@ }@b@@b@ public int previousIndex() {@b@ checkMod();@b@ return this.iter.previousIndex();@b@ }@b@@b@ public int nextIndex() {@b@ checkMod();@b@ return this.iter.nextIndex();@b@ }@b@@b@ public void remove() {@b@ checkMod();@b@ if (this.lastReturnedIndex < 0)@b@ throw new IllegalStateException();@b@@b@ get().remove(this.lastReturnedIndex);@b@ this.expected = this.this$0.list;@b@ this.iter = get().listIterator(previousIndex());@b@ this.lastReturnedIndex = -1;@b@ }@b@@b@ public void set() {@b@ checkMod();@b@ if (this.lastReturnedIndex < 0)@b@ throw new IllegalStateException();@b@@b@ get().set(this.lastReturnedIndex, o);@b@ this.expected = this.this$0.list;@b@ this.iter = get().listIterator(previousIndex() + 1);@b@ }@b@@b@ public void add() {@b@ checkMod();@b@ int i = nextIndex();@b@ get().add(i, o);@b@ this.iter = get().listIterator(i + 1);@b@ this.lastReturnedIndex = -1;@b@ }@b@ }@b@@b@ private class SubList@b@ implements List@b@ {@b@ private int first;@b@ private int last;@b@ private List expected;@b@ private final FastArrayList this$0;@b@@b@ public SubList(, int first, int last)@b@ {@b@ this.this$0 = this$0;@b@ this.first = first;@b@ this.last = last;@b@ this.expected = this$0.list;@b@ }@b@@b@ private List get() {@b@ if (this.this$0.list != this.expected)@b@ throw new ConcurrentModificationException();@b@@b@ return l.subList(this.first, this.last);@b@ }@b@@b@ public void clear() {@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ ArrayList temp = (ArrayList)this.this$0.list.clone();@b@ get(temp).clear();@b@ this.last = this.first;@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ get(this.expected).clear();@b@ }@b@ }@b@@b@ public boolean remove()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ boolean r = get(temp).remove(o);@b@ if (r) this.last -= 1;@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).remove(o);@b@ }@b@ }@b@@b@ public boolean removeAll()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ List sub = get(temp);@b@ boolean r = sub.removeAll(o);@b@ if (r) this.last = (this.first + sub.size());@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).removeAll(o);@b@ }@b@ }@b@@b@ public boolean retainAll()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ List sub = get(temp);@b@ boolean r = sub.retainAll(o);@b@ if (r) this.last = (this.first + sub.size());@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).retainAll(o);@b@ }@b@ }@b@@b@ public int size()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).size();@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).size();@b@ }@b@ }@b@@b@ public boolean isEmpty()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).isEmpty();@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).isEmpty();@b@ }@b@ }@b@@b@ public boolean contains()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).contains(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).contains(o);@b@ }@b@ }@b@@b@ public boolean containsAll()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).containsAll(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).containsAll(o);@b@ }@b@ }@b@@b@ public Object[] toArray()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).toArray(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).toArray(o);@b@ }@b@ }@b@@b@ public Object[] toArray()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).toArray();@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).toArray();@b@ }@b@ }@b@@b@ public boolean equals()@b@ {@b@ if (o == this) return true;@b@ if (this.this$0.fast)@b@ return get(this.expected).equals(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).equals(o);@b@ }@b@ }@b@@b@ public int hashCode()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).hashCode();@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).hashCode();@b@ }@b@ }@b@@b@ public boolean add()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ boolean r = get(temp).add(o);@b@ if (r) this.last += 1;@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).add(o);@b@ }@b@ }@b@@b@ public boolean addAll()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ boolean r = get(temp).addAll(o);@b@ if (r) this.last += o.size();@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).addAll(o);@b@ }@b@ }@b@@b@ public void add(, Object o)@b@ {@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ ArrayList temp = (ArrayList)this.this$0.list.clone();@b@ get(temp).add(i, o);@b@ this.last += 1;@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ get(this.expected).add(i, o);@b@ }@b@ }@b@@b@ public boolean addAll(, Collection o)@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ boolean bool1;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ boolean r = get(temp).addAll(i, o);@b@ this.this$0.list = temp;@b@ if (r) this.last += o.size();@b@ this.expected = temp;@b@ return r;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).addAll(i, o);@b@ }@b@ }@b@@b@ public Object remove()@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ Object localObject2;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ Object o = get(temp).remove(i);@b@ this.last -= 1;@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return o;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).remove(i);@b@ }@b@ }@b@@b@ public Object set(, Object a)@b@ {@b@ ArrayList temp;@b@ if (this.this$0.fast)@b@ synchronized (this.this$0) {@b@ Object localObject2;@b@ temp = (ArrayList)this.this$0.list.clone();@b@ Object o = get(temp).set(i, a);@b@ this.this$0.list = temp;@b@ this.expected = temp;@b@ return o;@b@ }@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).set(i, a);@b@ }@b@ }@b@@b@ public Iterator iterator()@b@ {@b@ return new SubListIter(this, 0);@b@ }@b@@b@ public ListIterator listIterator() {@b@ return new SubListIter(this, 0);@b@ }@b@@b@ public ListIterator listIterator() {@b@ return new SubListIter(this, i);@b@ }@b@@b@ public Object get()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).get(i);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).get(i);@b@ }@b@ }@b@@b@ public int indexOf()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).indexOf(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).indexOf(o);@b@ }@b@ }@b@@b@ public int lastIndexOf()@b@ {@b@ if (this.this$0.fast)@b@ return get(this.expected).lastIndexOf(o);@b@@b@ synchronized (this.this$0.list) {@b@ return get(this.expected).lastIndexOf(o);@b@ }@b@ }@b@@b@ public List subList(, int l)@b@ {@b@ if (this.this$0.list != this.expected)@b@ throw new ConcurrentModificationException();@b@@b@ return new SubList(this.this$0, this.first + f, f + l);@b@ }@b@@b@ static FastArrayList access$000(SubList x0)@b@ {@b@ return x0.this$0; } @b@ static List access$100(SubList x0) { return x0.get(x1); } @b@ static int access$210(SubList x0) { return (x0.last--); } @b@ static int access$208(SubList x0) { return (x0.last++);@b@ }@b@@b@ private class SubListIter@b@ implements ListIterator@b@ {@b@ private List expected;@b@ private ListIterator iter;@b@ private int lastReturnedIndex;@b@ private final FastArrayList.SubList this$1;@b@@b@ public SubListIter(, int i)@b@ {@b@ this.this$1 = this$1;@b@@b@ this.lastReturnedIndex = -1;@b@@b@ this.expected = FastArrayList.SubList.access$000(this$1).list;@b@ this.iter = FastArrayList.SubList.access$100(this$1, this.expected).listIterator(i);@b@ }@b@@b@ private void checkMod() {@b@ if (FastArrayList.SubList.access$000(this.this$1).list != this.expected)@b@ throw new ConcurrentModificationException();@b@ }@b@@b@ List get()@b@ {@b@ return FastArrayList.SubList.access$100(this.this$1, this.expected);@b@ }@b@@b@ public boolean hasNext() {@b@ checkMod();@b@ return this.iter.hasNext();@b@ }@b@@b@ public Object next() {@b@ checkMod();@b@ this.lastReturnedIndex = this.iter.nextIndex();@b@ return this.iter.next();@b@ }@b@@b@ public boolean hasPrevious() {@b@ checkMod();@b@ return this.iter.hasPrevious();@b@ }@b@@b@ public Object previous() {@b@ checkMod();@b@ this.lastReturnedIndex = this.iter.previousIndex();@b@ return this.iter.previous();@b@ }@b@@b@ public int previousIndex() {@b@ checkMod();@b@ return this.iter.previousIndex();@b@ }@b@@b@ public int nextIndex() {@b@ checkMod();@b@ return this.iter.nextIndex();@b@ }@b@@b@ public void remove() {@b@ checkMod();@b@ if (this.lastReturnedIndex < 0)@b@ throw new IllegalStateException();@b@@b@ get().remove(this.lastReturnedIndex);@b@ FastArrayList.SubList.access$210(this.this$1);@b@ this.expected = FastArrayList.SubList.access$000(this.this$1).list;@b@ this.iter = get().listIterator(previousIndex());@b@ this.lastReturnedIndex = -1;@b@ }@b@@b@ public void set() {@b@ checkMod();@b@ if (this.lastReturnedIndex < 0)@b@ throw new IllegalStateException();@b@@b@ get().set(this.lastReturnedIndex, o);@b@ this.expected = FastArrayList.SubList.access$000(this.this$1).list;@b@ this.iter = get().listIterator(previousIndex() + 1);@b@ }@b@@b@ public void add() {@b@ checkMod();@b@ int i = nextIndex();@b@ get().add(i, o);@b@ FastArrayList.SubList.access$208(this.this$1);@b@ this.iter = get().listIterator(i + 1);@b@ this.lastReturnedIndex = 1;@b@ }@b@ }@b@ }@b@}