Java by API/java.util/AbstractMap

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

extends AbstractMap

   <source lang="java">

/*

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);
 }

}

      </source>