Map集合

来源:互联网 发布:广州网站搜索优化 编辑:程序博客网 时间:2024/06/16 06:18

一.概述

Map集合没有继承Collection接口,它提供的是key到value的映射.Map中不能包含相同的key,一个key只能映射一个value.

Map集合产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象再映射中的存储位置.

Map集合包括Map接口以及Map接口的所有实现类


二.Map接口

常用方法:

举个栗子:

输出结果为:

三.Map接口的实现类
Map接口实现类有HashMap,TreeMap,LinkedHashMap,WeakHashMap,ConcurrentHashMap,IdentityHashMap.

1)HashMap:
1.一般用HashMap类实现Map集合,因为HashMap是基于哈希表的Map接口的实现类,HashMap能通过哈希码对其内部的映射关系进行快速查找,添加和删除映射关系效率更高.另外hashCode()是根类Object的方法,因此Java的对象都能产生散列码
2.HashMap允许使用null值和null键,但必须要保证键的唯一性,它不保证映射的顺序,而且不保证该顺序恒久不变

2)LinkedHashMap:
类似于HashMap.为了提高速度,它散列化所有元素,但是迭代遍历它的时候,取得的键值对的顺序是它的插入次序(当你调用putAll()方法时,传进来的map的键值对顺序是什么样的,LinkedHashMap输出的顺序就是什么样的),或者是最近最少使用(LRU)的次序.只比HashMap慢一点,但是迭代访问时比较快,因为它使用列表维护内部次序

3)TreeMap:
1.TreeMap中的映射关系存在一定的顺序,该顺序由Comparable和Comparator决定,它不仅实现了Map接口还实现了java.util.SortedMap接口(TreeMap是SortedMap现阶段的唯一实现),它的映射关系是根据键对象按照一定的顺序排列的,因此不允许键为null.
2.TreeMap带有subMap()方法,它可以返回一个子树.

4)WeakHashMap:
允许释放映射所指向的对象.如果映射之外没有引用指向某个"键",则此"键"可以被垃圾收集器回收.

5)ConcurrentHashMap:
线程安全的Map,不涉及同步加锁.

6)IdentityHashMap:
使用==代替equals()对键进行比较的散列映射.


下面举个例子看看HashMap与TreeMap输出的映射顺序:
输出结果为:

可以看到HashMap类实现Map集合没有一定的映射顺序,而TreeMap则是根据key值的升序进行排列.(如果看不到效果,请增加样本容量).


以上面的代码为例,看一看TreeMap的几个方法:

firsKey():返回第一个Key

lastKey():返回最后一个Key

subMap(String fromKey, String toKet):返回从fromKey到toKey这个范围内的Map子集

headMap(String toKey):返回tokey之前的Map子集

tailMap(String fromKey):返回包括fromKey在内以及它之后的Map子集

代码如下:



0 0