Map 简介及用法

2016-02-28 23:57:23   最后更新: 2016-02-28 23:57:23   访问数量:469




上一篇日志中,我们介绍了 java 基本容器中的序列容器,他们都实现了 Collection 接口

Collection 及其相关实现的容器简介及用法

本篇日志中,我们就来介绍一下 java 基本容器中另一大类常用容器 -- Map

 

 

Map 就是关联数组,也常被称为“映射表”或是“字典”,是键值对的集合容器,键不能重复出现是他的基本限制

如上图所示,Map 都继承自 Map 接口,标准 Java 类库中包含了几种 Map 的基本实现:

  1. TreeMap -- 基于红黑树的 Map 实现,因此是有序的,作为键加入 TreeMap 的对象必须实现 Comparable 接口,以便他可以被比较
  2. HashMp -- 基于哈希表的 Map 实现,虽然无序,但是优势却在于其查询速度
  3. LinkedHaskMap -- 在 HashMap 的基础上实现的双链表复合结构,在查询速度的基础上保证了插入顺序
  4. WeakHashMap -- WeakHashMap 与 HashMap 的用法基本相同,Hash 的 key 保留对象的强引用,即只要 HashMap 对象不被销毁,其对象所有 key 所引用的对象不会被垃圾回收,HashMap 也不会自动删除这些key所对应的键值对对象。但 WeakHashMap 的 key 所引用的对象没有被其他强引用变量所引用,则这些 key 所引用的对象可能被回收。WeakHashMap 中的每个 key 对象保存了实际对象的弱引用,当回收了该 key 所对应的实际对象后,WeakHashMap 会自动删除该key所对应的键值对
  5. ConcurrentHashMap -- ConcurrentHashMap 保证了线程安全,一般用在多线程环境中
  6. IdentityHashMap -- 与 HashMap 一样,IdentityHashMap 也不保证存储的顺序,他与 HashMap 的区别在于,它用来比较键是否相同的方法是 == 而不是 equals 方法,因此值相同但地址不同的两个对象是允许出现的,一般只在解决特殊问题时才会使用

 

Map 接口定义了基本的 map 操作方法:

Map 接口定义的方法
方法名方法说明
getV get(Object key)获取 key 对应的值
putV put(K key, V value)向容器中添加键值对
putAllvoid putAll(Map m)将 Map m 中的所有元素添加到容器中
removeV remove(Object key)删除指定的 key
clearvoid clear()清除容器中所有元素
containsKeyboolean containsKey(Object key)判断 key 是否存在
containsValueboolean containsValue(Object value)判断 value 是否存在
isEmptyboolean isEmpty()判断容器是否为空
keySetSet keySet()返回由所有 key 组成的 set
valuesCollection values()返回由所有 value 组成的 Collection
entrySetSet> entrySet();获取 Map 内部接口 Entry 组成的 Set

 

正如 Collection 可以通过 iterator 方法创建迭代器进行遍历,Map 也有类似的实现

Map 中定义了一个内部接口 Entry,通过 entrySet 可以返回所有元素 Entry 所组成 Set

Entry 实现了下面三个方法:

Map 接口定义的方法
方法名方法说明
getKeyK getKey()获取当前的 key
getValueV getValue()获取当前的 value
setValueV setValue(V value)设置当前的 value

 

下面的代码展示了他的用法:

Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> entry:entrySet) { System.out.println(entry.getKey() + ", " + entry.getValue()); }

 

 

这段代码非常类似于迭代器的用法,他通过 foreach 对每个元素的 Entry 内部接口进行了遍历,通过 entry 的 getKey 和 getValue 两个方法取出了键和值

 






技术帖      数据结构      龙潭书斋      java      hash      thinking in java      java编程思想      map      hashmap      散列表      entry      foreach      treemap      红黑树      weakhashmap      concurrenthashmap      identityhashmap      linkedhashmap     


京ICP备15018585号