MultiMap extends AbstractMap : 哈希表映射 « 集合数据结构 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 集合数据结构 » 哈希表映射屏幕截图 
MultiMap extends AbstractMap
 
import java.util.*;

public class MultiMap extends AbstractMap {
    
  private Map map;

  public MultiMap() {
    this(null);
  }

  public MultiMap(Map copy) {
    map = new HashMap();
    if (copy != null) {
      Iterator iter = copy.entrySet().iterator();
      while(iter.hasNext()) {
        Map.Entry entry = (Map.Entry)iter.next();
        add(entry.getKey(), entry.getValue());
      }
    }
  }

  public boolean containsKey(Object key) {
    Collection values = (Collection)map.get(key);
    return ((values != null&& (values.size() != 0));
  }
    
  public boolean containsValue(Object value) {
    Iterator iter = map.entrySet().iterator();
    boolean found = false;
    while (iter.hasNext()) {
      Map.Entry entry = (Map.Entry)iter.next();
      Collection values = (Collection)entry.getValue();
      if (values.contains(value)) {
        found = true;
        break;
      }
    }
    return found;
  }


  public Object get(Object key) {
    return map.get(key);
  }

  public Object put(Object key, Object value) {
    if (!(value instanceof Collection)) {
      throw new IllegalArgumentException(value.getClass().toString());
    }
    Object original = get(key);
    map.put(key, value);
    return original;
  }

  public boolean add(Object key, Object value) {
    return getValues(key).add(value);
  }
    
  public boolean addAll(Object key, Collection values) {
    return getValues(key).addAll(values);
  }

  private Collection getValues(Object key) {
    Collection col = (Collection)map.get(key);
    if (col == null) {
      col = new HashSet();
      map.put(key, col);
    }
    return col;
  }

  public Object remove(Object key) {
    Object original = get(key);
    map.remove(key);
    return original;
  }

  public boolean remove(Object key, Object value) {
    Collection values = (Collection)map.get(key);
    if (values == null) {
      return false;
    else {
      return values.remove(value);
    }
  }

  public void clear() {
    map.clear();
  }

  public String toString() {
    StringBuffer buff = new StringBuffer();
    buff.append("{");
    Iterator keys = map.keySet().iterator();
    boolean first = true;
    while (keys.hasNext()) {
      if (first) {
        first = false;
      else {
        buff.append(", ");
      }
      Object key = keys.next();
      Collection values = getValues(key);
      buff.append("[" + key + ": " + values + "]");
    }
    buff.append("}");
    return buff.toString();
  }

  public Set entrySet() {
    int size = 0;
    Iterator iterKeys = map.entrySet().iterator();
    while (iterKeys.hasNext()) {
      Map.Entry entry = (Map.Entry)iterKeys.next();
      Collection values = (Collection)entry.getValue();
      Iterator iterValues = values.iterator();
      while (iterValues.hasNext()) { 
        size++;
        iterValues.next();
      }
    }

    final int finalSize = size;

    final Iterator entries = map.entrySet().iterator();

    return new AbstractSet() {
      int pos = 0;
      Map.Entry entry;
      Iterator values;

      public Iterator iterator() { 
        return new Iterator() {
          public void remove() {
            throw new UnsupportedOperationException();
          }
          public boolean hasNext() {
            return pos != finalSize;
          }
          public Object next() {
            while(true) {
              if (entry == null) {
                entry = (Map.Entry)entries.next();
                values = ((Collection)entry.getValue()).iterator();
              }
              Object key = entry.getKey();
              if (values.hasNext()) {
                Object value = values.next();
                pos++;
                return new Entry(key, value);
              else {
                entry = null;
              }
            }
          }
        };
      }
      public int size() {
        return finalSize;
      }
    };
  }

  private static class Entry implements Map.Entry {
    Object key;
    Object value;

    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 value) {
      Object oldValue = this.value;
      this.value = value;
      return oldValue;
    }

    public boolean equals(Object o) {
      if (!(instanceof Map.Entry)) {
        return false;
      else {
        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() {
      return ((value==null: value.hashCode());
    }

    public String toString() {
      return key+"="+value;
    }
  }
  public static void main (String args[]) {
    Map map = new HashMap();
    map.put("one""two");
    map.put("three""four");
    map.put("five""six");
    MultiMap multi = new MultiMap(map);
    System.out.println(multi);
    multi.add("five""seven");
    multi.add("five""eight");
    multi.add("five""nine");
    multi.add("five""ten");
    multi.add("three""seven");
    System.out.println(multi);
    multi.remove("three");
    System.out.println(multi);
  }
}


           
         
  
Related examples in the same category
1. 在Java哈希表检查是否存在特定的键
2. 在Java哈希表检查是否存在特定的值
3. 从Java哈希表取得采集值
4. Get Set view of Keys from Java Hashtable
5. 获取尺寸Java哈希表
6. 遍历键Java哈希表
7. 从Java哈希表移除所有值
8. 扫描内容哈希表
9. 从Java哈希表删除值
10. 排序键哈希表
11. Associates keys with valuesAssociates keys with values
12. Iterate through values of Java Hashtable
13. 一个简单的映射实现一个简单的映射实现
14. Hash table with separate chaining
15. 哈希表与线性探测哈希表与线性探测
16. Hash table with double hashingHash table with double hashing
17. Working with Key-Value Pairs in a Hashtable
18. Demonstrate the Hashtable class, and an Enumeration
19. Demonstrate the HashMap class, and an IteratorDemonstrate the HashMap class, and an Iterator
20. Soft HashMap
21. Array Map extends AbstractMapArray Map extends AbstractMap
22. Demonstrating the WeakHashMapDemonstrating the WeakHashMap
23. 使用treemap使用treemap
24. 排序元素TreeMap排序元素TreeMap
25. What you can do with a TreeMapWhat you can do with a TreeMap
26. A Map implemented with ArrayLists
27. 简单的演示HashMap简单的演示HashMap
28. HashMap
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.