JAVA集合框架(三)-Map

栏目: Java · 发布时间: 5年前

内容简介: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 特性告白

“弱键”映射,允许释放映射所指向的对象;主要是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾收集器回收。(还没用过,先晓得有这种“高级容器”吧)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习

机器学习

周志华 / 清华大学出版社 / 2016-1-1 / 88.00元

机器学习是计算机科学与人工智能的重要分支领域. 本书作为该领域的入门教材,在内容上尽可能涵盖机器学习基础知识的各方面。 为了使尽可能多的读者通过本书对机器学习有所了解, 作者试图尽可能少地使用数学知识. 然而, 少量的概率、统计、代数、优化、逻辑知识似乎不可避免. 因此, 本书更适合大学三年级以上的理工科本科生和研究生, 以及具有类似背景的对机器学 习感兴趣的人士. 为方便读者, 本书附录给出了一......一起来看看 《机器学习》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具