- 论坛徽章:
- 0
|
Map相关子类
主要包含以下几种类型的Map,包括:HashMap,TreeMap,LinkedMap, WeakHashMap,IdentityHashMap HashMap 插入和查询的开销是固定的。可以通过ctor设置容量和负载因子,调整容器的性能。 LinkedHashMap 类似于HashMap,但迭代遍历时取得键值对的顺序是插入顺序或者是最近最少使用次序。只比HashMap慢一点,而在迭代访问时反而更快,因为内部使用链表维护内部次序。 TreeMap 基于红黑树的实现。查看“键”或“键值对”时,它们会被排序(由Comparable|Comparator)决定。TreeMap的特点在于所得到的结果是经过排序的,TreeMap是唯一带有subMap方法的Map。 WeakHashMap 弱键映射,允许释放映射所指向的对象,未解决某类特殊问题而设计的。如果映射之外没有引用指向那个键,则此键可以被垃圾回收器回收。 IdentityHashMap 使用==代替equals()对键进行比较的散列映射。
#测试Random生成随机数的分布
package com.biaoflying;import java.util.*;class Counter{ int i; public String toString(){ return ""+i; }}public class RandomTest1{ public static void main(String[] args){ Random rand=new Random(); Integer ky=0; Map map=new HashMap(); for(int i=0;i ky=new Integer(rand.nextInt(20)); //System.out.println(ky); if(map.containsKey(ky)) ((Counter)map.get(ky)).i++; else map.put(ky,new Counter()); } System.out.println(map); }}
#一次输出的结果如下,可以看到还是挺均匀的:{0=494, 1=479, 2=522, 3=498, 4=494, 5=494, 6=486, 7=490, 8=526,9=551, 10=496, 11=487, 12=496, 13=556, 14=512, 15=483, 17=468, 16=475, 19=475, 18=498}
#使用SortedMap&LinkedHashMap
TreeMap是SortedMap当前唯一的实现,提供了以下的功能方法
Comparator comparator()返回当前Map采用的Comparator,若返回null则表示以自然方式排序
Object firstKey()返回Map的第一个键
Object lastKey()返回Map中最后一个键
SortedMap subMap(fromKey,toKey)生成Map的子集,范围由参数指定
SortedMap headMap(toKey)
SortedMap tailMap(fromKey)
例子参见P343 TIJ
----------------------------------------------------------
LinkedHashMap与HashMap类似为了提高速度散列化所有的元素,但在遍历键值对时又以元素的插入顺序返回。此外可以在ctor中设定,使之采用基于LRU算法来返回键值对。于是最近没有访问过的元素会出现在队列前面。
例子参见P345 TIJ
Map查询与插入的原理及其流程可以参看P348-353。
hashcode,equals,Map.Entry.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63463/showart_511754.html |
|