内容简介:Map是java中用于存储键值对映射的接口。是解决编程问题最常用的数据结构之一。 在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂。这个时候其实可以多考虑下map这种结构了,说不定能更简洁地实现呢。引用《编程思想》中一个代码示例:测试Random可以产生理想的数字分布。其实就是统计一个产生随机数的次数。
Map是 java 中用于存储键值对映射的接口。是解决编程问题最常用的数据结构之一。 在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂。这个时候其实可以多考虑下map这种结构了,说不定能更简洁地实现呢。
引用《编程思想》中一个代码示例:
测试Random可以产生理想的数字分布。其实就是统计一个产生随机数的次数。
public class RandomTest {
@Test
public void testRandom()
{
Random rand =new Random(47);
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
for(int i = 1; i < 10000; i++)
{
int r = rand.nextInt(20);
Integer freq = map.get(r);
map.put(r, freq == null ? 1 : freq + 1);
}
System.out.println(map);
}
}
复制代码
输出结果: {0=481, 1=502, 2=488, 3=508, 4=481, 5=503, 6=519, 7=471, 8=468, 9=549, 10=513, 11=531, 12=521, 13=506, 14=477, 15=497, 16=533, 17=509, 18=478, 19=464}
Map接口的常用实现类
- HashMap
- LinkedHashMap
- TreeMap
- ConurrentHashMap
- Hashtable
- WeakHashMap
一般来说,HashMap是你的第一选择,因为它对速度进行了优化。如果有其他比如 排序 或是线程安全方面的需求时,才考虑选择其他的实现。
HashMap特性告白
基于散列表实现,存储key的顺序不是插入的顺序。可以通过构造器设置容量和负载因子,以调整容器性能。 遍历HashMap的几种方法:
// for循环entryset
for(Entry<Integer,Integer>entry : map.entrySet())
{
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
}
// 遍历key获取values
for (Integer key : map.keySet())
{
System.out.println(key + "===" + map.get(key));
}
// 遍历values
for (Integer value : map.values()) {
System.out.println("value:" + value);
}
复制代码
LinkedHashMap 特性告白
类似于HashMap,通过链表来维护插入key的顺序,保证放入和取出的顺序是一致的。 如果使用场景中既要求映射关系、又要保证存储顺序,可以选择此种实现类。 性能上较HashMap慢一点。迭代访问时能快点,因为链表的缘故。
TreeMap 特性告白
基于红黑树实现。查看“键”或“键值对”时,它们会被排序(次序是由Comparable或Comparator决定)。
- 要么存储进入TreeMap的对象时实现了Comparable接口的可比较对象
- 要么在创建TreeMap容器时需要传入比较器对象Comparator
ConurrentHashMap 特性告白
java.util.concurrent包中的线程安全的映射容器。 主要为了解决HashMap线程不安全和Hashtable效率不高的问题。
Hashtable 特性告白
是Hashtable,而不是HashTable呦! 基本和HashMap很类似,只是Hashtable的方法加了synchronized重量级锁来保证线程安全性。
WeakHashMap 特性告白
“弱键”映射,允许释放映射所指向的对象;主要是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾收集器回收。(还没用过,先晓得有这种“高级容器”吧)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML5 Programming
Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99
What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!