HashMap, LinkedHashMap 和 TreeMap的区别

HashMap, LinkedHashMap 和 TreeMap的区别

Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有什么不同的。Hashtables里面又是怎么样的呢?

Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet()); 
print(m1.values()); SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet()); 
print(sm.values());LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet()); 
print(lm.values());

回答一

所有这三个类都实现Map接口,并且提供功能大部分都是一样的。最重要的区别是通过entry进行迭代的顺序:

  • HashMap完全不保证迭代的顺序。它可以完全改变元素添加的顺序
  • TreeMap会根据 key的compareTo() 方法(或者是一个外部的比较器) 来实现一个自然顺序 进行迭代,另外他实现了SortedMap接口(含有依赖于这个排序顺序的方法)
  • LinkedHashMap将会按entry插入map的顺序进行迭代

“Hashtable” 是 基于hash的映射的一个通用名字。在Java 的API里面,Hashtable是一个来自于Java1.1版本,在集合框架存在之前的已经过时的类了。他不应该再次被使用了,因为他的API里面充斥着各种过时的方法和重复的功能。并且他的方法是基于synchronized的(可能会降低性能并且通常来说是用不到的)。用ConcurrentHashMap去替代它吧。

回答二

这3个都是唯一的key到一个value的映射,故而都实现了map接口

  • HashMap是一个基于key的哈希映射。它支持 O(1) 时间复杂度的get/put操作。key一定要一致地实现hashCode() 和 equals()方法,这样才能使得HashMap可以正常工作。

  • LinkedHashMap和HashMap很像,但是它添加对于元素插入顺序的保存,所以他的迭代顺序是和插入顺序相同的(或者是访问顺序,取决于构造器的参数)

  • TreeMap是一种基于树的映射。它的put/get操作需要O(log n)的时间复杂度。它要求item的元的Comparable or Comparator有相同的比较机制。而它的迭代次序就是基于这个机制的。

文章翻译自Stack Overflow:https://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“陪护机器人”研报:距离真正“陪护”还差那么一点

一款有“缺陷”的机器人,怎能做到真正的“陪护”? 近日,鼎盛智能发布了一款名为Ibotn的(爱蹦)幼儿陪伴机器人,核心看点就是通过人脸识别、场景识别等计算机视觉技术来实现机器人对儿童的陪护。不过&#xf…

neo-6m uno_Uno-统治所有人的平台

neo-6m unoFirst, we should start off with what Uno is and why you should care. 首先,我们应该从Uno是什么以及为什么要关心开始。 As stated on their website, Uno is "The only platform for building native mobile, desktop and WebAssembly apps wi…

【转】消息队列应用场景

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,…

JDK和JRE区别是什么

问题:JDK和JRE区别是什么 他们的角色分别是什么?我们应该什么时候使用他们? 回答一 JRE是Java Runtime Environment(Java运行时环境)。它是一个包,集合了运行一个编译好的Java程序的一切必须的东西&…

树莓派新手入门教程

http://www.ruanyifeng.com/blog/2017/06/raspberry-pi-tutorial.html

lime 模型_使用LIME的糖尿病预测模型解释— OneZeroBlog

lime 模型Article outline文章大纲 Introduction 介绍 Data Background 资料背景 Aim of the article 本文的目的 Exploratory analysis 探索性分析 Training a Random Forest Model 训练随机森林模型 Global Importance 全球重要性 Local Importance 当地重要性 介绍 (Introd…

react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态

react 生命挂钩In this blog post, we are going to learn -在这篇博客中,我们将学习- What React hooks are 什么是React钩子 How to use hooks for state management 如何使用挂钩进行状态管理 Before we start working with hooks, let us take a brief moment …

Linux第三周作业

1.三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构; ②函数调用堆栈,堆栈完成了计算机的基本功能:函数的参数传递机制和局部变量存取 ; ③中断,多道程序操作系统的基点,没有…

什么时候使用静态方法

问题:什么时候使用静态方法 I am wondering when to use static methods? Say if I have a class with a few getters and setters, a method or two, and I want those methods only to be invokable on an instance object of the class. Does this mean I shou…

RESTful API浅谈

2019独角兽企业重金招聘Python工程师标准>>> 上半年时候,部门有组织的讨论了一下实践微服务的技术话题,主要内容是SOA服务和微服务各自的优势和难点,其中有提到关于RESTful API设计方法。 正好最近在深入的学习HTTP协议&#xff0…

spring自动注入--------

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:p"http://www.springframework.org/schema/p"xmlns:c"http://www.springframework.org/schema/c"xmlns…

变量的作用域和生存期:_生存分析简介:

变量的作用域和生存期:In the previous article, I have described the Kaplan-Meier estimator. To give a quick recap, it is a non-parametric method to approximating the true survival function. This time, I will focus on another approach to visualizing a surviv…

数字孪生营销_如何通过数字营销增加您的自由职业收入

数字孪生营销There are a lot of ways we could go with this topic as it’s a huge one, but I just want to cover the nuggets here and make it simple as well as practical to understand and implement.我们可以采用很多方法来处理这个主题&#xff0c;因为它是一个很大…

您的网卡配置暂不支持1000M宽带说明

国内宽带网速越来越快&#xff0c;运营商更是在今年初纷纷推进千兆宽带业务。为了让用户更好地了解网络状况&#xff0c;360宽带测速器发布新版&#xff0c;优化了宽带测速范围&#xff0c;可有效支持最高1000&#xff2d;的带宽测量。此外&#xff0c;宽带测速器能检测用户网卡…

教辅的组成(网络流果题 洛谷P1231)

题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案&#xff0c;然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数&#xff0c;其中有书&#xff0c;有答案&#xff0c;有练习册。已知一个完整的书册均应该包含且仅包含一本书、一本练习册和一份…

Java中怎么样检查一个字符串是不是数字呢

问题&#xff1a;Java中怎么样检查一个字符串是不是数字呢 在解析之前&#xff0c;怎么样检查一个字符串是不是数字呢 回答一 这些通常是由一个简单的用户自定义函数去解决的&#xff08;即&#xff0c;自带的 “isNumeric” 函数&#xff09; 例如 public static boolean…

小程序支付api密钥_如何避免在公共前端应用程序中公开您的API密钥

小程序支付api密钥问题 (The Problem) All you want to do is fetch some JSON from an API endpoint for the weather, some book reviews, or something similarly simple.您要做的就是从API端点获取一些有关天气的JSON&#xff0c;一些书评或类似的简单内容。 The fetch qu…

永无止境_永无止境地死:

永无止境Wir befinden uns mitten in der COVID-19-Pandemie und damit auch im Mittelpunkt einer medialen Geschichte, die durch eine noch nie dagewesene Komplexitt und Dynamik gekennzeichnet ist. Wie kann Informationsdesign helfen, diese Explosion von Nachrich…

HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路

题目链接&#xff1a;http://acm.split.hdu.edu.cn/showproblem.php?pid4612 Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 7206 Accepted Submission(s): 1681 Problem DescriptionN planets are …

Android sqlite load_extension漏洞解析

路人甲 2015/09/25 14:540x01 sqlite load_extensionSQLite从3.3.6版本&#xff08;http://www.sqlite.org/cgi/src/artifact/71405a8f9fedc0c2&#xff09;开始提供了支持扩展的能力&#xff0c;通过sqlite_load_extension API&#xff08;或者load_extensionSQL语句&#xf…