map接口实际开发中是高频使用的,这里来简要总结下:
jkd提供的实现是我们经常拿来用的,常见的有 HashMap ,LinkedHashMap,TreeMap,HashTable
从线程安全方面,HashTable 安全,其他都是不安全的
另外三个里面,性能最好的是HashMap,最推荐使用,LinkedHashMap 特别之处在于保证了遍历输出时候,输出顺序与插入顺序一致,TreeMap则实现了SortedMap接口,自带key值大小排序从小到大的输出。
这里抄一篇比较好的详细解析文章:先谢谢原著作者了
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。以下代码实例可以看出HashMap,LinkedHashMap,TreeMap的区别:
- package ceshi;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedHashMap;
- import java.util.Map;
- import java.util.TreeMap;
- public class Ceshi{
- @SuppressWarnings("unchecked")
- public static void main(String[] args) {
- //HashMap
- System.out.println("------HashMap无序输出------");
- HashMap hsMap=new HashMap();
- hsMap.put("3", "Value3");
- hsMap.put("1", "Value1");
- hsMap.put("2", "Value2");
- hsMap.put("b", "ValueB");
- hsMap.put("a", "ValueA");
- Iterator it = hsMap.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry e = (Map.Entry) it.next();
- System.out.println("Key: " + e.getKey() + "--Value: "
- + e.getValue());
- }
- //TreeMap
- System.out.println("------TreeMap按Key排序输出------");
- TreeMap teMap=new TreeMap();
- teMap.put("3", "Value3");
- teMap.put("1", "Value1");
- teMap.put("2", "Value2");
- teMap.put("b", "ValueB");
- teMap.put("a", "ValueA");
- Iterator tit = teMap.entrySet().iterator();
- while (tit.hasNext()) {
- Map.Entry e = (Map.Entry) tit.next();
- System.out.println("Key: " + e.getKey() + "--Value: "
- + e.getValue());
- }
- //LinkedHashMap
- System.out.println("--LinkedHashMap根据输入的顺序输出--");
- LinkedHashMap lhsMap=new LinkedHashMap();
- lhsMap.put("3", "Value3");
- lhsMap.put("1", "Value1");
- lhsMap.put("2", "Value2");
- lhsMap.put("b", "ValueB");
- lhsMap.put("a", "ValueA");
- Iterator lit = lhsMap.entrySet().iterator();
- while (lit.hasNext()) {
- Map.Entry e = (Map.Entry) lit.next();
- System.out.println("Key: " + e.getKey() + "--Value: "
- + e.getValue());
- }
- }
- }
- 执行结果为:
- ------HashMap无序输出------
- Key: 3--Value: Value3
- Key: 2--Value: Value2
- Key: 1--Value: Value1
- Key: b--Value: ValueB
- Key: a--Value: ValueA
- ------TreeMap按Key排序输出------
- Key: 1--Value: Value1
- Key: 2--Value: Value2
- Key: 3--Value: Value3
- Key: a--Value: ValueA
- Key: b--Value: ValueB
- --LinkedHashMap根据输入的顺序输出--
- Key: 3--Value: Value3
- Key: 1--Value: Value1
- Key: 2--Value: Value2
- Key: b--Value: ValueB
- Key: a--Value: ValueA
相关推荐
文件类型包括383个JavaScript脚本文件、150个JSON配置文件、145个TypeScript源代码文件、125个Markdown文档、68个PNG图片文件、25个JST文件、21个YAML配置文件、21个Map文件、21个WXSS样式文件、21个WXML页面文件和...
在这个“FreeMarker入门之一:say hello world”中,我们将探讨如何使用FreeMarker来创建一个简单的“Hello, World!”程序,了解其基本语法和工作原理。 1. **FreeMarker简介** FreeMarker是一个开源项目,由...
在Spring Boot应用程序中使用Kibernetes Configmap 1. Spring Boot Application属性 首先,让我们向MVC控制器添加简单的启动属性,没什么大不了的: @RestController public class ControllerMVC { @Value ( " ${...
【OpenStreetMapDemo】是一个基于iOS平台的示例项目,旨在展示如何集成和使用OpenStreetMap(OSM)服务。OpenStreetMap是一个开源的全球地图项目,任何人都可以贡献地图数据,提供了一个免费的、可自定义的地图解决...
增加处理带有参数的请求的方法,例如 say(@RequestParam String name) 和 say(@RequestBody Map userMap)。 步骤3:改造服务消费者为 Feign 客户端 在 eureka-consumer 的 pom.xml 文件中添加 Feign 依赖。 在 ...
Python中的`filter`, `map`, `reduce`, 和 `apply` 是四个非常重要的高阶函数,它们在处理数据和实现特定逻辑时提供了强大的功能。这些函数都属于Python的内建函数,能够有效地帮助我们进行序列操作。 1. **lambda ...
10. **标准库(Standard Library)**:C++ 标准库提供了大量的工具,包括容器(如 vector、list、map)、算法(如排序、查找)、字符串类、文件操作等,极大地丰富了编程功能。 学习 C++ 时,你需要理解这些基本...
迭代器(如`each`、`map`和`select`)通常接受代码块作为参数,并基于代码块执行特定的操作。 ### 结论 通过上述总结,我们可以看出Ruby语言具有简洁的语法和强大的功能集,使其成为进行Web开发、自动化脚本编写等...
osmdroid-android-3.0.10.jar openstreetmap android版地图库 slf4j-api-1.7.2.jar openstreetmap 引用到的一个日志库文件必不可少 osmbonuspack_v3.6.jar openstreetmap引用的一个路径规划第三方类库 ...
*英语单词的基本词汇:map, cup, ruler, pen *英语单词的基本词汇:orange, jacket, key, quilt Starter Unit 3 * 字段:color, red, yellow, green, blue, black, white, purple, brown * 字段:the, now, see, ...
最近一直在学coursera上面web intelligence and big data这门课,上周五印度老师布置了一个家庭作业,... So if your code starts taking too long, say more than an hour to run, there is probably something wrong.
GoogleMapDemo是一个简单的基于Google Maps Android API v2的demo并实现了通过...【注意:】运行此demo项目前,需要在AndroidManifest.xml设置你自己的googleMap key和相应的keystore,否则运行后地图显示一片空白。
4. 在地图和杨玲卧室的平面图上复习"a map of China",引入"a map of world, wall, on the wall"等词,并教学介词"beside, between"的用法。 5. "Read and say"环节,学生先听对话录音,然后自我阅读,教师提供个别...
4. 访问值栈中对象的普通方法:<s:property value="cat.friend.say().length()"/> 5. 访问值栈中action的普通方法:()"/> 访问静态方法和属性 6. 访问静态方法:()"/> 7. 访问静态属性: 访问Math类的属性 8. ...
首先,教案以一个简单的字母游戏开始,通过"I say P, you say pen"的形式,让学生熟悉并快速反应出物品的英文名称。这种方式可以提高学生的听力和反应能力,同时复习字母表。 接着,PPT引入了基本的颜色词汇,如red...
共情图通常分为四个象限:说(Say)、想(Think)、做(Do)和感觉(Feel)。这个工具帮助设计团队从用户表达出来的话语、内心的想法、外在的行为以及内在的感受四个方面综合分析,绘制出目标用户的思维和行为模式图...
Consider the following problem: You are to visit all the cities, towns, and villages of, say, Sweden and then return to your starting point. This might take a while (there are 24,978 locations to ...
这段代码中,`@my_decorator`是一个语法糖,相当于`say_hello = my_decorator(say_hello)`。 ##### 5. 惰性求值 (Lazy Evaluation) 惰性求值是指在实际需要之前不执行计算的技术,这对于节省计算资源和提高程序性能...
* 亮点:Words game, Listen and say, Let’s talk, Look and think about attractions, Look and answer, Listen and tick, Let’s watch, Close your book and try to repeat what you listened. 知识点四:语言...
【描述】"i will say this is best config for gsgo unix i uoload this for donwlod kovaaks map" 描述了这个配置文件的优秀性,特别是对于使用 Unix 类操作系统(如 Linux)玩 CS:GO 的玩家。"Kovaak's Map" 是一...