Map和List
Map和List
当把Map中的key-value对当成单独的集合元素来对待时,Map和Set就统一起来了。
Map集合是一个关联数组,它包含两组值:一组是所有key组成的集合,因为Map集合的key不允许重复,而且Map不会保存key加入的顺序,因此这些key可以组成一个Set集合;另外一组是value组成的集合,因为Map集合的value完全可以重复,而且Map可以根据key来获取对应的value,所以这些value可以组成一个List集合。实际上Map的values方法并未返回一个List集合。
import java.util.HashMap;
import java.util.TreeMap;
publicclass MapValueTest {
publicstaticvoid main(String[] args){
HashMap<String,Double> scores = new HashMap<String,Double>();
scores.put("yuwen", 89.0);
scores.put("shuxue", 83.0);
scores.put("yingwen", 80.0);
System.out.println(scores.values());
System.out.println(scores.values().getClass());
TreeMap<String,Double> health = new TreeMap<String,Double>();
health.put("height", 173.0);
health.put("weight", 71.0);
System.out.println(health.values());
System.out.println(health.values().getClass());
}
}
Output
[83.0, 89.0, 80.0]
class java.util.HashMap$Values
[173.0, 71.0]
class java.util.TreeMap$Values
HashMap和TreeMap2个集合的values()方法返回值确实是包含Map中所有value的集合,但它们并不是List对象,而分别是HashMap$Values对象和TreeMap$Values对象。
HashMap和TreeMap2这2个Map类的values()方法的实现完全相同。当程序第一次调用2个Map对象的values方法时,它们会新建一个values对象,并将该values对象赋给values实例变量;当程序下次调用values()方法时,将直接以values实例变量作为返回值。由此可见,对于HashMap和TreeMap而言,它们values()方法返回值的区别主要体现在各自values内部类的实现上。
从底层实现上来看,Set和Map很相似,如果从用法的角度来看,Map和List也有很大的相似之处:
Map接口提供了get(K key)方法允许Map对象根据key来取得value;
List接口提供了get(int index)方法允许List对象根据元素索引来取得value.
对于List接口而言,它仅按元素的加入顺序保存了一系列的Java对象。
Map和List底层实现了并没有太大的相似之上,只是在用法上存在一些相似之处;既可以是List相当于所有key都是int类型的Map,也可以说Map相当于索引是任意类型的List.
JS的对象有点类似于Map结构,也是多个key-value对组成,只是习惯上JS对象的key-value称为属性名,属性值。对于JS对象而言,除了可使用属性语法来方法属性值之外,完全可以用数组语法来访问它的属性值。
Map和List的更多相关文章
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- 多用多学之Java中的Set,List,Map
很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析
在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...
- MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程
在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...
- MapReduce剖析笔记之五:Map与Reduce任务分配过程
在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
随机推荐
- react.js 从零开始(二)组件的生命周期
什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...
- 我也来谈javascript高级编程之:javascript函数编译过程
前言 题目有点大,其实也就是手痒...跟大家来扯一下javascript编译过程. 那么到底什么是“编译”呢 这个...本人文笔太差,我还是直接举例子吧. 相信玩过js童鞋应该都看过下面这样一个面试题 ...
- SQL Server 2005 MD5函数
原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...
- phpmyadmin常见错误
phpmyadmin用root无法登录(username和password都正确) 解决: 看mysqlclient能否够登录(我遇到的是不能登录),若无法登录就更改rootpassword,改好后就 ...
- Date、DateTime值的格式化扩展函数
public static class DateTimeExtensions { public static DateTime ToUtc(this DateTime time) ...
- 使用JS的FormData对象
利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 创建一个FormData对象 你可以先创建一个空的F ...
- measureChildren作品
无论是在改写View依然是ViewGroup什么时候.特别ViewGrop什么时候,通常是不可避免的重写onMeasure方法,我们一定会调用setMeasuredDimension()将測量好的宽高 ...
- DP 水的问题
假设的自然数N的K随机二进制表示是不相邻的两个相邻的数字.那么我们说这个数字是K好一些. 乞讨L地点K十六进制数K的相当数量的数. 例如K = 4.L = 2什么时候.整个K好一些11.13.20.2 ...
- 心有多宽 路就有多宽-- BreezeMH源码公布
非常多话想说,但不知道从何说起~ 去年暑假做自己的第一个外挂,然后是Breeze‘s魔兽系列工具,測试版.正式版,看着自己进大学时的梦想慢慢的变成现实,那种喜悦感无法言表,于是就想着让很多其它的在校大 ...
- MyEclipse优化全攻略
(0) 吐槽 Eclipse仅仅是个半成品有木有?什么都须要自己安装插件,新手非常难用有木有? 安装上插件以后了版本号兼容和各种问题烦死人有木有? 都怪碎片和版本号乱公布有木有? IntelliJ I ...