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.pswp.cn/news/391106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391106.shtml
英文地址,請注明出處:http://en.pswp.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…