Map小结

Map主要用于存储健值对
个人理解:因为Map是根据键得到值,因此需要保证键值的唯一性,不允许键重复(重复了覆盖了),但允许值重复。
1、HashMap
根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。(就是说,当我们将键值对存入到hashmap以后,取出时的顺序时不定的)
HashMap的一些基本性质:
HashMap最多只允许一条记录的键为Null;
允许多条记录的值为  Null;
HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用  Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
2、LinkedHashMap
保存了记录的插入顺序。(因此,当我们使用迭代器去遍历LinkedHashMap时,得到的值顺序与之前插入Map中的顺序时一样的)

两者之间的差异:
(1)插入顺序的保存
HashMap不保存插入的顺序,其内部存放元素的顺序是不定的;而LinkedHashMap保存了插入的顺序。
(2)访问速度
在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

3、Hashtable
Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

4、TreeMap
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

使用时应注意的点:
一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。

TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

文章参考了网上一些网友的相关知识点。

时间: 2024-10-26 16:12:35

Map小结的相关文章

Java基础(十一)

一.集合框架 1.集合框架定义 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类):是集合接口的具体实现.从本质上讲,它们是可重复使用的数据结构. 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序.这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现. 除了集合,该框架也定义了几个Map接口和类.Map里存储的是

hadoop2-MapReduce详解

本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3.客户端源码分析4.小结5.Mapper详解 5.1.map输入 5.2.map输出 5.3.map小结6.Reduce详解7.总结 若有不正之处,还请多多谅解,并希望批评指正. 请尊重作者劳动成果,转发请标明blog地址 https://www.cnblogs.com/hongten/p/hongt

Hadoop 2.4.1 Map/Reduce小结

看了下MapReduce的例子.再看了下Mapper和Reducer源码,理清了参数的意义,就o了. public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> Map是打散过程,把输入的数据,拆分成若干的键值对.Reduce是重组的,根据前面的键值对,重组数据. 自己写Map/Reduce的话,理解了如何拆分数据.组装数据,理解了

set/multiset和map/multimap用法小结

二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 现以map为例说明用法,multimap是可以插入重复键值的元素的map. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmat

概率论学习小结(road map)

在最近学习模式识别和机器学习时经常会用到概率论的知识,索性重新复习一遍概率论的知识.学习概率论最重要的一点不是公式的记忆,而是对公式背后的含义的理解.(其实学习任何一门知识都是如此,但是相比高数等的抽象性来说,概率可能显得更"接地气") 曾经在大学时代数学中学的最差的一门课便是概率论,然而最近的学习中,在几经挣扎之后却渐渐找到了这门课的乐趣,在本科时候学习的那个小小的课本将概率论的趣味完全遮盖住了. 学习概率论首先要明白这门课的意义.概率论顾名思义是研究事件发生的可能性的学科,这里不使

STL中的map/multimap小结

(1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)namespace std{ template <class key, class T, class Compare = less<key>, class Allocator = allocator<pair<const key, T> > > class map

Skin Microstructure Deformation with Displacement Map Convolution项目小结

经常有人问我你最近在干什么,但一句话真的很难说明白,最近两个月一直在尝试将Skin Microstructure Deformation with Displacement Map Convolution这篇论文以离线渲染的形式搬运到现有三维工具中,优先就是maya.首先非常感谢论文发表团队无私的贡献了自己的研究成果及过程,附一个论文introduce:http://gl.ict.usc.edu/Research/SkinStretch/. 概述:在cg制作中脸部写实渲染一直是体现水准的领域,随

map 容器常用功能小结

具体功能参考:click here~~ #include <bits/stdc++.h> using namespace std; int main() { /*map.at:修改元素值 map<string,int>mm= { { "abc",0}, { "bcd",0}, }; mm.at("abc")=-7; mm.at("bcd")=20; for(auto &x:mm) { cout&

ES6学习小结6:何为Map?

什么是map?类似于对象的数据结构,成员键可以是任何类型的值. 具体化:我们知道原先对象内属性名只能是字符串,而Map属性名可以是字符串,也可以是对象或数组.它是一个更完善的hash结构. 属性: 方法: 补充说明: 1.遍历顺序:插入顺序 2.对同一个键多次赋值,后面的值将覆盖前面的值 3.对同一个对象的引用,被视为一个键 4.对同样值的两个实例,被视为两个键 5.键跟内存地址绑定,只要内存地址不一样就视为两个键 6.添加多个以NaN作为键时,只会存在一个以NaN作为键的值 7.Object结