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 / HashMap.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.5 KB  |  380 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.  
  8. public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {
  9.    private transient Entry[] table;
  10.    private transient int count;
  11.    private int threshold;
  12.    private float loadFactor;
  13.    private transient int modCount;
  14.    private transient Set keySet;
  15.    private transient Set entrySet;
  16.    private transient Collection values;
  17.    private static final int KEYS = 0;
  18.    private static final int VALUES = 1;
  19.    private static final int ENTRIES = 2;
  20.    private static EmptyHashIterator emptyHashIterator = new EmptyHashIterator();
  21.    private static final long serialVersionUID = 362498820763181265L;
  22.  
  23.    public HashMap(int var1, float var2) {
  24.       this.modCount = 0;
  25.       this.keySet = null;
  26.       this.entrySet = null;
  27.       this.values = null;
  28.       if (var1 < 0) {
  29.          throw new IllegalArgumentException("Illegal Initial Capacity: " + var1);
  30.       } else if (!(var2 <= 0.0F) && !Float.isNaN(var2)) {
  31.          if (var1 == 0) {
  32.             var1 = 1;
  33.          }
  34.  
  35.          this.loadFactor = var2;
  36.          this.table = new Entry[var1];
  37.          this.threshold = (int)((float)var1 * var2);
  38.       } else {
  39.          throw new IllegalArgumentException("Illegal Load factor: " + var2);
  40.       }
  41.    }
  42.  
  43.    public HashMap(int var1) {
  44.       this(var1, 0.75F);
  45.    }
  46.  
  47.    public HashMap() {
  48.       this(11, 0.75F);
  49.    }
  50.  
  51.    public HashMap(Map var1) {
  52.       this(Math.max(2 * var1.size(), 11), 0.75F);
  53.       this.putAll(var1);
  54.    }
  55.  
  56.    public int size() {
  57.       return this.count;
  58.    }
  59.  
  60.    public boolean isEmpty() {
  61.       return this.count == 0;
  62.    }
  63.  
  64.    public boolean containsValue(Object var1) {
  65.       Entry[] var2 = this.table;
  66.       if (var1 == null) {
  67.          int var3 = var2.length;
  68.  
  69.          while(var3-- > 0) {
  70.             for(Entry var4 = var2[var3]; var4 != null; var4 = var4.next) {
  71.                if (var4.value == null) {
  72.                   return true;
  73.                }
  74.             }
  75.          }
  76.       } else {
  77.          int var5 = var2.length;
  78.  
  79.          while(var5-- > 0) {
  80.             for(Entry var6 = var2[var5]; var6 != null; var6 = var6.next) {
  81.                if (var1.equals(var6.value)) {
  82.                   return true;
  83.                }
  84.             }
  85.          }
  86.       }
  87.  
  88.       return false;
  89.    }
  90.  
  91.    public boolean containsKey(Object var1) {
  92.       Entry[] var2 = this.table;
  93.       if (var1 != null) {
  94.          int var3 = var1.hashCode();
  95.          int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
  96.  
  97.          for(Entry var5 = var2[var4]; var5 != null; var5 = var5.next) {
  98.             if (var5.hash == var3 && var1.equals(var5.key)) {
  99.                return true;
  100.             }
  101.          }
  102.       } else {
  103.          for(Entry var6 = var2[0]; var6 != null; var6 = var6.next) {
  104.             if (var6.key == null) {
  105.                return true;
  106.             }
  107.          }
  108.       }
  109.  
  110.       return false;
  111.    }
  112.  
  113.    public Object get(Object var1) {
  114.       Entry[] var2 = this.table;
  115.       if (var1 != null) {
  116.          int var3 = var1.hashCode();
  117.          int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
  118.  
  119.          for(Entry var5 = var2[var4]; var5 != null; var5 = var5.next) {
  120.             if (var5.hash == var3 && var1.equals(var5.key)) {
  121.                return var5.value;
  122.             }
  123.          }
  124.       } else {
  125.          for(Entry var6 = var2[0]; var6 != null; var6 = var6.next) {
  126.             if (var6.key == null) {
  127.                return var6.value;
  128.             }
  129.          }
  130.       }
  131.  
  132.       return null;
  133.    }
  134.  
  135.    private void rehash() {
  136.       int var1 = this.table.length;
  137.       Entry[] var2 = this.table;
  138.       int var3 = var1 * 2 + 1;
  139.       Entry[] var4 = new Entry[var3];
  140.       ++this.modCount;
  141.       this.threshold = (int)((float)var3 * this.loadFactor);
  142.       this.table = var4;
  143.       int var5 = var1;
  144.  
  145.       Entry var7;
  146.       int var8;
  147.       while(var5-- > 0) {
  148.          for(Entry var6 = var2[var5]; var6 != null; var4[var8] = var7) {
  149.             var7 = var6;
  150.             var6 = var6.next;
  151.             var8 = (var7.hash & Integer.MAX_VALUE) % var3;
  152.             var7.next = var4[var8];
  153.          }
  154.       }
  155.  
  156.    }
  157.  
  158.    public Object put(Object var1, Object var2) {
  159.       Entry[] var3 = this.table;
  160.       int var4 = 0;
  161.       int var5 = 0;
  162.       if (var1 != null) {
  163.          var4 = var1.hashCode();
  164.          var5 = (var4 & Integer.MAX_VALUE) % var3.length;
  165.  
  166.          for(Entry var6 = var3[var5]; var6 != null; var6 = var6.next) {
  167.             if (var6.hash == var4 && var1.equals(var6.key)) {
  168.                Object var7 = var6.value;
  169.                var6.value = var2;
  170.                return var7;
  171.             }
  172.          }
  173.       } else {
  174.          for(Entry var8 = var3[0]; var8 != null; var8 = var8.next) {
  175.             if (var8.key == null) {
  176.                Object var10 = var8.value;
  177.                var8.value = var2;
  178.                return var10;
  179.             }
  180.          }
  181.       }
  182.  
  183.       ++this.modCount;
  184.       if (this.count >= this.threshold) {
  185.          this.rehash();
  186.          var3 = this.table;
  187.          var5 = (var4 & Integer.MAX_VALUE) % var3.length;
  188.       }
  189.  
  190.       Entry var9 = new Entry(var4, var1, var2, var3[var5]);
  191.       var3[var5] = var9;
  192.       ++this.count;
  193.       return null;
  194.    }
  195.  
  196.    public Object remove(Object var1) {
  197.       Entry[] var2 = this.table;
  198.       if (var1 != null) {
  199.          int var3 = var1.hashCode();
  200.          int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
  201.          Entry var5 = var2[var4];
  202.  
  203.          for(Entry var6 = null; var5 != null; var5 = var5.next) {
  204.             if (var5.hash == var3 && var1.equals(var5.key)) {
  205.                ++this.modCount;
  206.                if (var6 != null) {
  207.                   var6.next = var5.next;
  208.                } else {
  209.                   var2[var4] = var5.next;
  210.                }
  211.  
  212.                --this.count;
  213.                Object var7 = var5.value;
  214.                var5.value = null;
  215.                return var7;
  216.             }
  217.  
  218.             var6 = var5;
  219.          }
  220.       } else {
  221.          Entry var8 = var2[0];
  222.  
  223.          for(Entry var9 = null; var8 != null; var8 = var8.next) {
  224.             if (var8.key == null) {
  225.                ++this.modCount;
  226.                if (var9 != null) {
  227.                   var9.next = var8.next;
  228.                } else {
  229.                   var2[0] = var8.next;
  230.                }
  231.  
  232.                --this.count;
  233.                Object var10 = var8.value;
  234.                var8.value = null;
  235.                return var10;
  236.             }
  237.  
  238.             var9 = var8;
  239.          }
  240.       }
  241.  
  242.       return null;
  243.    }
  244.  
  245.    public void putAll(Map var1) {
  246.       for(Map.Entry var3 : var1.entrySet()) {
  247.          this.put(var3.getKey(), var3.getValue());
  248.       }
  249.  
  250.    }
  251.  
  252.    public void clear() {
  253.       Entry[] var1 = this.table;
  254.       ++this.modCount;
  255.       int var2 = var1.length;
  256.  
  257.       while(true) {
  258.          --var2;
  259.          if (var2 < 0) {
  260.             this.count = 0;
  261.             return;
  262.          }
  263.  
  264.          var1[var2] = null;
  265.       }
  266.    }
  267.  
  268.    public Object clone() {
  269.       try {
  270.          HashMap var1 = (HashMap)super.clone();
  271.          var1.table = new Entry[this.table.length];
  272.  
  273.          for(int var2 = this.table.length; var2-- > 0; var1.table[var2] = this.table[var2] != null ? (Entry)this.table[var2].clone() : null) {
  274.          }
  275.  
  276.          var1.keySet = null;
  277.          var1.entrySet = null;
  278.          var1.values = null;
  279.          var1.modCount = 0;
  280.          return var1;
  281.       } catch (CloneNotSupportedException var3) {
  282.          throw new InternalError();
  283.       }
  284.    }
  285.  
  286.    public Set keySet() {
  287.       if (this.keySet == null) {
  288.          this.keySet = new 1(this);
  289.       }
  290.  
  291.       return this.keySet;
  292.    }
  293.  
  294.    public Collection values() {
  295.       if (this.values == null) {
  296.          this.values = new 2(this);
  297.       }
  298.  
  299.       return this.values;
  300.    }
  301.  
  302.    public Set entrySet() {
  303.       if (this.entrySet == null) {
  304.          this.entrySet = new 3(this);
  305.       }
  306.  
  307.       return this.entrySet;
  308.    }
  309.  
  310.    private Iterator getHashIterator(int var1) {
  311.       return (Iterator)(this.count == 0 ? emptyHashIterator : new HashIterator(this, var1));
  312.    }
  313.  
  314.    private void writeObject(ObjectOutputStream var1) throws IOException {
  315.       var1.defaultWriteObject();
  316.       var1.writeInt(this.table.length);
  317.       var1.writeInt(this.count);
  318.  
  319.       for(int var2 = this.table.length - 1; var2 >= 0; --var2) {
  320.          for(Entry var3 = this.table[var2]; var3 != null; var3 = var3.next) {
  321.             var1.writeObject(var3.key);
  322.             var1.writeObject(var3.value);
  323.          }
  324.       }
  325.  
  326.    }
  327.  
  328.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  329.       var1.defaultReadObject();
  330.       int var2 = var1.readInt();
  331.       this.table = new Entry[var2];
  332.       int var3 = var1.readInt();
  333.  
  334.       for(int var4 = 0; var4 < var3; ++var4) {
  335.          Object var5 = var1.readObject();
  336.          Object var6 = var1.readObject();
  337.          this.put(var5, var6);
  338.       }
  339.  
  340.    }
  341.  
  342.    int capacity() {
  343.       return this.table.length;
  344.    }
  345.  
  346.    float loadFactor() {
  347.       return this.loadFactor;
  348.    }
  349.  
  350.    // $FF: synthetic method
  351.    static Iterator access$000(HashMap var0, int var1) {
  352.       return var0.getHashIterator(var1);
  353.    }
  354.  
  355.    // $FF: synthetic method
  356.    static int access$100(HashMap var0) {
  357.       return var0.count;
  358.    }
  359.  
  360.    // $FF: synthetic method
  361.    static Entry[] access$200(HashMap var0) {
  362.       return var0.table;
  363.    }
  364.  
  365.    // $FF: synthetic method
  366.    static int access$308(HashMap var0) {
  367.       return var0.modCount++;
  368.    }
  369.  
  370.    // $FF: synthetic method
  371.    static int access$110(HashMap var0) {
  372.       return var0.count--;
  373.    }
  374.  
  375.    // $FF: synthetic method
  376.    static int access$300(HashMap var0) {
  377.       return var0.modCount;
  378.    }
  379. }
  380.