`
素寒丶玩玩
  • 浏览: 18102 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

say say Map

 
阅读更多

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的区别: 

Java代码  收藏代码
  1. package ceshi;  
  2. import java.util.HashMap;  
  3. import java.util.Iterator;  
  4. import java.util.LinkedHashMap;  
  5. import java.util.Map;  
  6. import java.util.TreeMap;  
  7. public class Ceshi{  
  8. @SuppressWarnings("unchecked")  
  9. public static void main(String[] args) {  
  10.   
  11. //HashMap  
  12. System.out.println("------HashMap无序输出------");  
  13. HashMap hsMap=new HashMap();  
  14. hsMap.put("3""Value3");  
  15. hsMap.put("1""Value1");  
  16. hsMap.put("2""Value2");  
  17. hsMap.put("b""ValueB");  
  18. hsMap.put("a""ValueA");  
  19. Iterator it = hsMap.entrySet().iterator();  
  20. while (it.hasNext()) {  
  21. Map.Entry e = (Map.Entry) it.next();  
  22. System.out.println("Key: " + e.getKey() + "--Value: "  
  23. + e.getValue());  
  24. }  
  25.   
  26. //TreeMap  
  27. System.out.println("------TreeMap按Key排序输出------");  
  28. TreeMap teMap=new TreeMap();  
  29. teMap.put("3""Value3");  
  30. teMap.put("1""Value1");  
  31. teMap.put("2""Value2");  
  32. teMap.put("b""ValueB");  
  33. teMap.put("a""ValueA");  
  34. Iterator tit = teMap.entrySet().iterator();  
  35. while (tit.hasNext()) {  
  36. Map.Entry e = (Map.Entry) tit.next();  
  37. System.out.println("Key: " + e.getKey() + "--Value: "  
  38. + e.getValue());  
  39. }  
  40.   
  41. //LinkedHashMap  
  42. System.out.println("--LinkedHashMap根据输入的顺序输出--");  
  43. LinkedHashMap lhsMap=new LinkedHashMap();  
  44. lhsMap.put("3""Value3");  
  45. lhsMap.put("1""Value1");  
  46. lhsMap.put("2""Value2");  
  47. lhsMap.put("b""ValueB");  
  48. lhsMap.put("a""ValueA");  
  49. Iterator lit = lhsMap.entrySet().iterator();  
  50. while (lit.hasNext()) {  
  51. Map.Entry e = (Map.Entry) lit.next();  
  52. System.out.println("Key: " + e.getKey() + "--Value: "  
  53. + e.getValue());  
  54. }  
  55. }  
  56.   
  57. }  
  58.   
  59. 执行结果为:  
  60. ------HashMap无序输出------  
  61. Key: 3--Value: Value3  
  62. Key: 2--Value: Value2  
  63. Key: 1--Value: Value1  
  64. Key: b--Value: ValueB  
  65. Key: a--Value: ValueA  
  66. ------TreeMap按Key排序输出------  
  67. Key: 1--Value: Value1  
  68. Key: 2--Value: Value2  
  69. Key: 3--Value: Value3  
  70. Key: a--Value: ValueA  
  71. Key: b--Value: ValueB  
  72. --LinkedHashMap根据输入的顺序输出--  
  73. Key: 3--Value: Value3  
  74. Key: 1--Value: Value1  
  75. Key: 2--Value: Value2  
  76. Key: b--Value: ValueB  
  77. Key: a--Value: ValueA  
分享到:
评论

相关推荐

    基于微信小程序云开发的SayLove表白墙设计源码

    文件类型包括383个JavaScript脚本文件、150个JSON配置文件、145个TypeScript源代码文件、125个Markdown文档、68个PNG图片文件、25个JST文件、21个YAML配置文件、21个Map文件、21个WXSS样式文件、21个WXML页面文件和...

    spring-boot-kibernetes-config-map:在Spring Boot应用程序中使用Kubernetes ConfigMap

    在Spring Boot应用程序中使用Kibernetes Configmap 1. Spring Boot Application属性 首先,让我们向MVC控制器添加简单的启动属性,没什么大不了的: @RestController public class ControllerMVC { @Value ( " ${...

    【ios】OpenStreetMapDemo

    OpenStreetMap IOS版demo,共包含: 添加annotation,overlay,Ployline 具体实现方式请看demo中的源码

    BingMapsDemo

    BingMap的demo demo中展示了实例化地图,添加覆盖物(Marker),添加折线,多边形。

    Конфиг Шока 5_huiss_Will_

    i will say this is best config for gsgo unix i uoload this for donwlod kovaaks map

    GoogleMapDemo(Android)

    GoogleMapDemo是一个简单的基于Google Maps Android API v2的demo并实现了通过...【注意:】运行此demo项目前,需要在AndroidManifest.xml设置你自己的googleMap key和相应的keystore,否则运行后地图显示一片空白。

    BingMapsIOS

    压缩包中包含 BingMaps头文件、 BingMaps.Resources.bundle、 libBingMaps.a 三个文件,导入到开发的项目中,直接可以使用bingMap。

    利用micemeat实现mapreduce

    最近一直在学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.

    OpenstreetmapAndroid版开发必备库文件

    osmdroid-android-3.0.10.jar openstreetmap android版地图库 slf4j-api-1.7.2.jar openstreetmap 引用到的一个日志库文件必不可少 osmbonuspack_v3.6.jar openstreetmap引用的一个路径规划第三方类库 ...

    python Algorithms 2nd Edition

    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 ...

    mvel 2.0.15

    Lets say we decide to make an instance of this particular class the context object for the expression, and we evaluate it like so: Person personInst = new Person(); personInst.setName("Mr. Foo"); ...

    rails No route matches 错误的解决方法

    找到 config/routes.rb 文件, 打开编辑, 找到如下行: # See how all your routes lay out with “rake routes” 在这行下面添加一行, 内容如下: map.connect ”,:controller=>”index”,:action=>”index”解决no ...

    leetcode中国-leetcode:leetcode刷题

    leetcode中国 我自己的leetcode刷题记录 ###[20150920] Valid Palindrome Implement strStr() String ...字符串处理,map Simplify Path,字符串处理,stack Length of Last Word,字符串处理.细节题 Rever

    BingMapAndroid版SDK和API

    压缩包内包含: bing.jar(抽取官方API打包成jar包,需要拷贝到自己项目libs) BingMapAndroidSDK(官方SDK,需要在自己项目中引用library) assets文件,包含BingMapsAndroid.js文件、以及一些图片资源文件 ...

    Big Data Analytics Using Splunk

    You also learn to draw from machine data, enabling you to analyze, say, web server log files and patterns of user access in real time, as the access is occurring. Gone are the days when you need be ...

    csgopugbot:Counter-Strike Go IRC Pugbot

    pug [map] - 在所需地图上启动 PUG 会话,如果未指定地图,则默认选择 de_dust2。 !join - 将用户加入 PUG 会话。 !leave - 从 PUG 会话中删除用户。 !players - 列出 PUG 中的当前用户。 !stats - 目前未实施。...

    demimud:DemiMUD,用Rust编写的MUD代码库

    MUD只有大约10个命令( say , look , get , drop , map ,move命令和表情)。 它能够从“时间的黎明”( )库存区域加载一些基本的房间和生物描述,并允许进行探索,但是除了拾起和放下物体外,没有任何交互...

    MPC_RL_Car:2020Spring,ECE239AS(强化学习)的作业和课程项目存储库

    MaP,CaP,RaLly! 随机环境中UGV计划和控制的混合架构 2020年Spring,ECE239AS(强化学习)的作业和课程项目资料库。讲师:Lin Yang博士。 (c)2020年Swapnil Sayan Saha(欧洲经济委员会,UCE系,NESL),...

    翎风源码HGE完美版

    4.增加脚本命令:ISONMAP MAP //检测当前人是否在MAP地图上 5.增加脚本命令:DELAYCALL 作用:延时执行同一个NPC脚本中指定的标签内容 格式:DELAYCALL S LABEL 其中S是延时秒数(毫秒),Label是执行的脚本标签 示例...

    Practical+Python+AI+Projects-Apress(2018).pdf

    Given a map of the city, my home address, and the address of the daycare of my two-year-old son, what is the best route to take on my bike to bring him to daycare as fast as possible? The goal is ...

Global site tag (gtag.js) - Google Analytics