java map

java.util 最常用的集合类之一是Map ,map提供了一个通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。常用到的有hashmap和hashtable。

[@more@]Map 的接口和方法

覆盖的方法。 我们将这 Object 的这两个方法覆盖,以正确比较 Map 对象的等价性。

equals(Object o) 比较指定对象与此 Map 的等价性
hashCode() 返回此 Map 的哈希码

其他方法

clear() 从 Map 中删除所有映射
remove(Object key) 从 Map 中删除键和关联的值
put(Object key, Object value) 将指定值与指定键相关联
clear() 从 Map 中删除所有映射
putAll(Map t) 将指定 Map 中的所有映射复制到此 map

如果我们使用putAll,则map可以自动扩展大小。如果使用put,建议在创建map的时候使用loadfactor自动扩展以提高效率。

查看 Map

  • 所有键值对 — 参见 entrySet()
  • 所有键 — 参见 keySet()
  • 所有值 — 参见 values()
  • 访问元素

    检索有关 Map 内容的信息但不更改 Map 内容。

    get(Object key) 返回与指定键关联的值
    containsKey(Object key) 如果 Map 包含指定键的映射,则返回 true
    containsValue(Object value) 如果此 Map 将一个或多个键映射到指定值,则返回 true
    isEmpty() 如果 Map 不包含键-值映射,则返回 true
    size() 返回 Map 中的键-值映射的数目

    key唯一但是value不一定唯一,所以使用containsValue的时候可能效率会较低。

    hash技术

    int hashvalue = (key.hashCode() & 0x7FFFFFFF) % table.length;
    需要考虑和处理hash collision,如果是使用已有的则不需要考虑,如果自己实现hashmap,
    则需要考虑和处理对应的case。
    效率问题:之前使用的时候简单创建,基本上都没有初始化大小和负载因子,现在看了一下
    jdk的help才发现有这两个参数可以在很多时候提高性能。
    在创建map的时候建议使用
    Map userMap = new HashMap();
    来替代
    HashMap userMap = new HashMap();
    这也符合设计模式或者面向对象的理论,只要实现了相同的接口和方法
    只需要在这个创建的地方修改,使用不同的类来创建,其他的调用代码则无须修改。