首页

关于cayenne包中定义FastArrayList继承ArrayList自定义序列并对线程安全及效率方面进行优化处理

标签:cayenne,FastArrayList,安全ArrayList,自定义序列,多线程安全     发布时间:2018-11-05   

一、前言

关于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@}