Java by API/java.util/AbstractMap — различия между версиями

Материал из Java эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 14:11, 31 мая 2010

extends AbstractMap

/*
 Output:
{Virginia=Richmond, Massachusetts=Boston, New York=Albany}
[Virginia, Massachusetts, New York]
[Richmond, Boston, Albany]

 * */
import java.io.Serializable;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MainClass {
  public static void main (String args[]) {
    Map map = new ArrayMap(13);
    map.put("Virginia", "Richmond");
    map.put("Massachusetts", "Boston");
    map.put("New York", "Albany");
    System.out.println(map);
    System.out.println(map.keySet());
    System.out.println(map.values());
  }
}
class ArrayMap extends AbstractMap implements Cloneable, Serializable {
  static class Entry implements Map.Entry {
    protected Object key, value;
    public Entry(Object key, Object value) {
      this.key = key;
      this.value = value;
    }
    public Object getKey() {
      return key;
    }
    public Object getValue() {
      return value;
    }
    public Object setValue(Object newValue) {
      Object oldValue = value;
      value = newValue;
      return oldValue;
    }
    public boolean equals(Object o) {
      if (!(o instanceof Map.Entry)) {
        return false;
      }
      Map.Entry e = (Map.Entry) o;
      return (key == null ? e.getKey() == null : key.equals(e.getKey()))
          && (value == null ? e.getValue() == null : value.equals(e.getValue()));
    }
    public int hashCode() {
      int keyHash = (key == null ? 0 : key.hashCode());
      int valueHash = (value == null ? 0 : value.hashCode());
      return keyHash ^ valueHash;
    }
    public String toString() {
      return key + "=" + value;
    }
  }
  private Set entries = null;
  private ArrayList list;
  public ArrayMap() {
    list = new ArrayList();
  }
  public ArrayMap(Map map) {
    list = new ArrayList();
    putAll(map);
  }
  public ArrayMap(int initialCapacity) {
    list = new ArrayList(initialCapacity);
  }
  public Set entrySet() {
    if (entries == null) {
      entries = new AbstractSet() {
        public void clear() {
          list.clear();
        }
        public Iterator iterator() {
          return list.iterator();
        }
        public int size() {
          return list.size();
        }
      };
    }
    return entries;
  }
  public Object put(Object key, Object value) {
    int size = list.size();
    Entry entry = null;
    int i;
    if (key == null) {
      for (i = 0; i < size; i++) {
        entry = (Entry) (list.get(i));
        if (entry.getKey() == null) {
          break;
        }
      }
    } else {
      for (i = 0; i < size; i++) {
        entry = (Entry) (list.get(i));
        if (key.equals(entry.getKey())) {
          break;
        }
      }
    }
    Object oldValue = null;
    if (i < size) {
      oldValue = entry.getValue();
      entry.setValue(value);
    } else {
      list.add(new Entry(key, value));
    }
    return oldValue;
  }
  public Object clone() {
    return new ArrayMap(this);
  }
}