home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.lang.reflect.Array;
-
- public class LinkedList extends AbstractSequentialList implements List, Cloneable, Serializable {
- private transient Entry header;
- private transient int size;
- private static final long serialVersionUID = 876323262645176354L;
-
- public LinkedList() {
- this.header = new Entry((Object)null, (Entry)null, (Entry)null);
- this.size = 0;
- this.header.next = this.header.previous = this.header;
- }
-
- public LinkedList(Collection var1) {
- this();
- this.addAll(var1);
- }
-
- public Object getFirst() {
- if (this.size == 0) {
- throw new NoSuchElementException();
- } else {
- return this.header.next.element;
- }
- }
-
- public Object getLast() {
- if (this.size == 0) {
- throw new NoSuchElementException();
- } else {
- return this.header.previous.element;
- }
- }
-
- public Object removeFirst() {
- Object var1 = this.header.next.element;
- this.remove(this.header.next);
- return var1;
- }
-
- public Object removeLast() {
- Object var1 = this.header.previous.element;
- this.remove(this.header.previous);
- return var1;
- }
-
- public void addFirst(Object var1) {
- this.addBefore(var1, this.header.next);
- }
-
- public void addLast(Object var1) {
- this.addBefore(var1, this.header);
- }
-
- public boolean contains(Object var1) {
- return this.indexOf(var1) != -1;
- }
-
- public int size() {
- return this.size;
- }
-
- public boolean add(Object var1) {
- this.addBefore(var1, this.header);
- return true;
- }
-
- public boolean remove(Object var1) {
- if (var1 == null) {
- for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
- if (var2.element == null) {
- this.remove(var2);
- return true;
- }
- }
- } else {
- for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
- if (var1.equals(var3.element)) {
- this.remove(var3);
- return true;
- }
- }
- }
-
- return false;
- }
-
- public boolean addAll(Collection var1) {
- return this.addAll(this.size, var1);
- }
-
- public boolean addAll(int var1, Collection var2) {
- int var3 = var2.size();
- if (var3 == 0) {
- return false;
- } else {
- ++super.modCount;
- Entry var4 = var1 == this.size ? this.header : this.entry(var1);
- Entry var5 = var4.previous;
- Iterator var6 = var2.iterator();
-
- for(int var7 = 0; var7 < var3; ++var7) {
- Entry var8 = new Entry(var6.next(), var4, var5);
- var5.next = var8;
- var5 = var8;
- }
-
- var4.previous = var5;
- this.size += var3;
- return true;
- }
- }
-
- public void clear() {
- ++super.modCount;
- this.header.next = this.header.previous = this.header;
- this.size = 0;
- }
-
- public Object get(int var1) {
- return this.entry(var1).element;
- }
-
- public Object set(int var1, Object var2) {
- Entry var3 = this.entry(var1);
- Object var4 = var3.element;
- var3.element = var2;
- return var4;
- }
-
- public void add(int var1, Object var2) {
- this.addBefore(var2, var1 == this.size ? this.header : this.entry(var1));
- }
-
- public Object remove(int var1) {
- Entry var2 = this.entry(var1);
- this.remove(var2);
- return var2.element;
- }
-
- private Entry entry(int var1) {
- if (var1 >= 0 && var1 < this.size) {
- Entry var2 = this.header;
- if (var1 < this.size / 2) {
- for(int var3 = 0; var3 <= var1; ++var3) {
- var2 = var2.next;
- }
- } else {
- for(int var4 = this.size; var4 > var1; --var4) {
- var2 = var2.previous;
- }
- }
-
- return var2;
- } else {
- throw new IndexOutOfBoundsException("Index: " + var1 + ", Size: " + this.size);
- }
- }
-
- public int indexOf(Object var1) {
- int var2 = 0;
- if (var1 == null) {
- for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
- if (var3.element == null) {
- return var2;
- }
-
- ++var2;
- }
- } else {
- for(Entry var4 = this.header.next; var4 != this.header; var4 = var4.next) {
- if (var1.equals(var4.element)) {
- return var2;
- }
-
- ++var2;
- }
- }
-
- return -1;
- }
-
- public int lastIndexOf(Object var1) {
- int var2 = this.size;
- if (var1 == null) {
- for(Entry var3 = this.header.previous; var3 != this.header; var3 = var3.previous) {
- --var2;
- if (var3.element == null) {
- return var2;
- }
- }
- } else {
- for(Entry var4 = this.header.previous; var4 != this.header; var4 = var4.previous) {
- --var2;
- if (var1.equals(var4.element)) {
- return var2;
- }
- }
- }
-
- return -1;
- }
-
- public ListIterator listIterator(int var1) {
- return new ListItr(this, var1);
- }
-
- private Entry addBefore(Object var1, Entry var2) {
- Entry var3 = new Entry(var1, var2, var2.previous);
- var3.previous.next = var3;
- var3.next.previous = var3;
- ++this.size;
- ++super.modCount;
- return var3;
- }
-
- private void remove(Entry var1) {
- if (var1 == this.header) {
- throw new NoSuchElementException();
- } else {
- var1.previous.next = var1.next;
- var1.next.previous = var1.previous;
- --this.size;
- ++super.modCount;
- }
- }
-
- public Object clone() {
- Object var1 = null;
-
- try {
- var4 = (LinkedList)super.clone();
- } catch (CloneNotSupportedException var3) {
- throw new InternalError();
- }
-
- var4.header = new Entry((Object)null, (Entry)null, (Entry)null);
- var4.header.next = var4.header.previous = var4.header;
- var4.size = 0;
- var4.modCount = 0;
-
- for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
- var4.add(var2.element);
- }
-
- return var4;
- }
-
- public Object[] toArray() {
- Object[] var1 = new Object[this.size];
- int var2 = 0;
-
- for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
- var1[var2++] = var3.element;
- }
-
- return var1;
- }
-
- public Object[] toArray(Object[] var1) {
- if (var1.length < this.size) {
- var1 = Array.newInstance(var1.getClass().getComponentType(), this.size);
- }
-
- int var2 = 0;
-
- for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
- var1[var2++] = var3.element;
- }
-
- if (var1.length > this.size) {
- var1[this.size] = null;
- }
-
- return var1;
- }
-
- private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- var1.writeInt(this.size);
-
- for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
- var1.writeObject(var2.element);
- }
-
- }
-
- private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- int var2 = var1.readInt();
- this.header = new Entry((Object)null, (Entry)null, (Entry)null);
- this.header.next = this.header.previous = this.header;
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.add(var1.readObject());
- }
-
- }
-
- // $FF: synthetic method
- static Entry access$000(LinkedList var0) {
- return var0.header;
- }
-
- // $FF: synthetic method
- static int access$100(LinkedList var0) {
- return var0.size;
- }
-
- // $FF: synthetic method
- static void access$200(LinkedList var0, Entry var1) {
- var0.remove(var1);
- }
-
- // $FF: synthetic method
- static Entry access$300(LinkedList var0, Object var1, Entry var2) {
- return var0.addBefore(var1, var2);
- }
- }
-