home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / util / LinkedList.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.1 KB  |  326 lines

  1. package java.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.lang.reflect.Array;
  8.  
  9. public class LinkedList extends AbstractSequentialList implements List, Cloneable, Serializable {
  10.    private transient Entry header;
  11.    private transient int size;
  12.    private static final long serialVersionUID = 876323262645176354L;
  13.  
  14.    public LinkedList() {
  15.       this.header = new Entry((Object)null, (Entry)null, (Entry)null);
  16.       this.size = 0;
  17.       this.header.next = this.header.previous = this.header;
  18.    }
  19.  
  20.    public LinkedList(Collection var1) {
  21.       this();
  22.       this.addAll(var1);
  23.    }
  24.  
  25.    public Object getFirst() {
  26.       if (this.size == 0) {
  27.          throw new NoSuchElementException();
  28.       } else {
  29.          return this.header.next.element;
  30.       }
  31.    }
  32.  
  33.    public Object getLast() {
  34.       if (this.size == 0) {
  35.          throw new NoSuchElementException();
  36.       } else {
  37.          return this.header.previous.element;
  38.       }
  39.    }
  40.  
  41.    public Object removeFirst() {
  42.       Object var1 = this.header.next.element;
  43.       this.remove(this.header.next);
  44.       return var1;
  45.    }
  46.  
  47.    public Object removeLast() {
  48.       Object var1 = this.header.previous.element;
  49.       this.remove(this.header.previous);
  50.       return var1;
  51.    }
  52.  
  53.    public void addFirst(Object var1) {
  54.       this.addBefore(var1, this.header.next);
  55.    }
  56.  
  57.    public void addLast(Object var1) {
  58.       this.addBefore(var1, this.header);
  59.    }
  60.  
  61.    public boolean contains(Object var1) {
  62.       return this.indexOf(var1) != -1;
  63.    }
  64.  
  65.    public int size() {
  66.       return this.size;
  67.    }
  68.  
  69.    public boolean add(Object var1) {
  70.       this.addBefore(var1, this.header);
  71.       return true;
  72.    }
  73.  
  74.    public boolean remove(Object var1) {
  75.       if (var1 == null) {
  76.          for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
  77.             if (var2.element == null) {
  78.                this.remove(var2);
  79.                return true;
  80.             }
  81.          }
  82.       } else {
  83.          for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
  84.             if (var1.equals(var3.element)) {
  85.                this.remove(var3);
  86.                return true;
  87.             }
  88.          }
  89.       }
  90.  
  91.       return false;
  92.    }
  93.  
  94.    public boolean addAll(Collection var1) {
  95.       return this.addAll(this.size, var1);
  96.    }
  97.  
  98.    public boolean addAll(int var1, Collection var2) {
  99.       int var3 = var2.size();
  100.       if (var3 == 0) {
  101.          return false;
  102.       } else {
  103.          ++super.modCount;
  104.          Entry var4 = var1 == this.size ? this.header : this.entry(var1);
  105.          Entry var5 = var4.previous;
  106.          Iterator var6 = var2.iterator();
  107.  
  108.          for(int var7 = 0; var7 < var3; ++var7) {
  109.             Entry var8 = new Entry(var6.next(), var4, var5);
  110.             var5.next = var8;
  111.             var5 = var8;
  112.          }
  113.  
  114.          var4.previous = var5;
  115.          this.size += var3;
  116.          return true;
  117.       }
  118.    }
  119.  
  120.    public void clear() {
  121.       ++super.modCount;
  122.       this.header.next = this.header.previous = this.header;
  123.       this.size = 0;
  124.    }
  125.  
  126.    public Object get(int var1) {
  127.       return this.entry(var1).element;
  128.    }
  129.  
  130.    public Object set(int var1, Object var2) {
  131.       Entry var3 = this.entry(var1);
  132.       Object var4 = var3.element;
  133.       var3.element = var2;
  134.       return var4;
  135.    }
  136.  
  137.    public void add(int var1, Object var2) {
  138.       this.addBefore(var2, var1 == this.size ? this.header : this.entry(var1));
  139.    }
  140.  
  141.    public Object remove(int var1) {
  142.       Entry var2 = this.entry(var1);
  143.       this.remove(var2);
  144.       return var2.element;
  145.    }
  146.  
  147.    private Entry entry(int var1) {
  148.       if (var1 >= 0 && var1 < this.size) {
  149.          Entry var2 = this.header;
  150.          if (var1 < this.size / 2) {
  151.             for(int var3 = 0; var3 <= var1; ++var3) {
  152.                var2 = var2.next;
  153.             }
  154.          } else {
  155.             for(int var4 = this.size; var4 > var1; --var4) {
  156.                var2 = var2.previous;
  157.             }
  158.          }
  159.  
  160.          return var2;
  161.       } else {
  162.          throw new IndexOutOfBoundsException("Index: " + var1 + ", Size: " + this.size);
  163.       }
  164.    }
  165.  
  166.    public int indexOf(Object var1) {
  167.       int var2 = 0;
  168.       if (var1 == null) {
  169.          for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
  170.             if (var3.element == null) {
  171.                return var2;
  172.             }
  173.  
  174.             ++var2;
  175.          }
  176.       } else {
  177.          for(Entry var4 = this.header.next; var4 != this.header; var4 = var4.next) {
  178.             if (var1.equals(var4.element)) {
  179.                return var2;
  180.             }
  181.  
  182.             ++var2;
  183.          }
  184.       }
  185.  
  186.       return -1;
  187.    }
  188.  
  189.    public int lastIndexOf(Object var1) {
  190.       int var2 = this.size;
  191.       if (var1 == null) {
  192.          for(Entry var3 = this.header.previous; var3 != this.header; var3 = var3.previous) {
  193.             --var2;
  194.             if (var3.element == null) {
  195.                return var2;
  196.             }
  197.          }
  198.       } else {
  199.          for(Entry var4 = this.header.previous; var4 != this.header; var4 = var4.previous) {
  200.             --var2;
  201.             if (var1.equals(var4.element)) {
  202.                return var2;
  203.             }
  204.          }
  205.       }
  206.  
  207.       return -1;
  208.    }
  209.  
  210.    public ListIterator listIterator(int var1) {
  211.       return new ListItr(this, var1);
  212.    }
  213.  
  214.    private Entry addBefore(Object var1, Entry var2) {
  215.       Entry var3 = new Entry(var1, var2, var2.previous);
  216.       var3.previous.next = var3;
  217.       var3.next.previous = var3;
  218.       ++this.size;
  219.       ++super.modCount;
  220.       return var3;
  221.    }
  222.  
  223.    private void remove(Entry var1) {
  224.       if (var1 == this.header) {
  225.          throw new NoSuchElementException();
  226.       } else {
  227.          var1.previous.next = var1.next;
  228.          var1.next.previous = var1.previous;
  229.          --this.size;
  230.          ++super.modCount;
  231.       }
  232.    }
  233.  
  234.    public Object clone() {
  235.       Object var1 = null;
  236.  
  237.       try {
  238.          var4 = (LinkedList)super.clone();
  239.       } catch (CloneNotSupportedException var3) {
  240.          throw new InternalError();
  241.       }
  242.  
  243.       var4.header = new Entry((Object)null, (Entry)null, (Entry)null);
  244.       var4.header.next = var4.header.previous = var4.header;
  245.       var4.size = 0;
  246.       var4.modCount = 0;
  247.  
  248.       for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
  249.          var4.add(var2.element);
  250.       }
  251.  
  252.       return var4;
  253.    }
  254.  
  255.    public Object[] toArray() {
  256.       Object[] var1 = new Object[this.size];
  257.       int var2 = 0;
  258.  
  259.       for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
  260.          var1[var2++] = var3.element;
  261.       }
  262.  
  263.       return var1;
  264.    }
  265.  
  266.    public Object[] toArray(Object[] var1) {
  267.       if (var1.length < this.size) {
  268.          var1 = Array.newInstance(var1.getClass().getComponentType(), this.size);
  269.       }
  270.  
  271.       int var2 = 0;
  272.  
  273.       for(Entry var3 = this.header.next; var3 != this.header; var3 = var3.next) {
  274.          var1[var2++] = var3.element;
  275.       }
  276.  
  277.       if (var1.length > this.size) {
  278.          var1[this.size] = null;
  279.       }
  280.  
  281.       return var1;
  282.    }
  283.  
  284.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  285.       var1.defaultWriteObject();
  286.       var1.writeInt(this.size);
  287.  
  288.       for(Entry var2 = this.header.next; var2 != this.header; var2 = var2.next) {
  289.          var1.writeObject(var2.element);
  290.       }
  291.  
  292.    }
  293.  
  294.    private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  295.       var1.defaultReadObject();
  296.       int var2 = var1.readInt();
  297.       this.header = new Entry((Object)null, (Entry)null, (Entry)null);
  298.       this.header.next = this.header.previous = this.header;
  299.  
  300.       for(int var3 = 0; var3 < var2; ++var3) {
  301.          this.add(var1.readObject());
  302.       }
  303.  
  304.    }
  305.  
  306.    // $FF: synthetic method
  307.    static Entry access$000(LinkedList var0) {
  308.       return var0.header;
  309.    }
  310.  
  311.    // $FF: synthetic method
  312.    static int access$100(LinkedList var0) {
  313.       return var0.size;
  314.    }
  315.  
  316.    // $FF: synthetic method
  317.    static void access$200(LinkedList var0, Entry var1) {
  318.       var0.remove(var1);
  319.    }
  320.  
  321.    // $FF: synthetic method
  322.    static Entry access$300(LinkedList var0, Object var1, Entry var2) {
  323.       return var0.addBefore(var1, var2);
  324.    }
  325. }
  326.