Java(ArrayList和LinkedList)、(HashTable與HashMap)、(HashMap、Hashtable、LinkedHashMap和TreeMap比較)

1.ArrayList和LinkedList

(1)ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。?
(2)對于隨機訪問get和set,ArrayList絕對優于LinkedList,因為LinkedList要移動指針。?
(3)對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。?
這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優于LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優于ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。

2.HashTable與HashMap

相同點:

(1)都實現了Map、Cloneable、java.io.Serializable接口。
(2)都是存儲"鍵值對(key-value)"的散列表,而且都是采用拉鏈法實現的。

不同點:

(1)歷史原因:HashTable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現 。
(2)同步性:HashTable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的 。
(3)對null值的處理:HashMap的key、value都可為null,HashTable的key、value都不可為null 。
(4)基類不同:HashMap繼承于AbstractMap,而Hashtable繼承于Dictionary。

????? Dictionary是一個抽象類,它直接繼承于Object類,沒有實現任何接口。Dictionary類是JDK 1.0的引入的。雖然Dictionary也支持“添加key-value鍵值對”、“獲取value”、“獲取大小”等基本操作,但它的API函數比Map少;而且Dictionary一般是通過Enumeration(枚舉類)去遍歷,Map則是通過Iterator(迭代M器)去遍歷。 然而由于Hashtable也實現了Map接口,所以,它即支持Enumeration遍歷,也支持Iterator遍歷。
????? AbstractMap是一個抽象類,它實現了Map接口的絕大部分API函數;為Map的具體實現類提供了極大的便利。它是JDK 1.2新增的類。
???
(5)支持的遍歷種類不同:HashMap只支持Iterator(迭代器)遍歷。而Hashtable支持Iterator(迭代器)和Enumeration(枚舉器)兩種方式遍歷。

3.HashMap、Hashtable、LinkedHashMap和TreeMap比較

???? Hashmap 是一個最常用的Map,它根據鍵的HashCode 值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。遍歷時,取得數據的順序是完全隨機的。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導致數據的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

???? Hashtable 與 HashMap類似,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢。

???? LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的,也可以在構造時用帶參數,按照應用次數排序。在遍歷的時候會比HashMap慢,不過有種情況例外,當HashMap容量很大,實際數據較少時,遍歷起來可能會比LinkedHashMap慢,因為LinkedHashMap的遍歷速度只和實際數據有關,和容量無關,而HashMap的遍歷速度和他的容量有關。如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實現,它還可以按讀取順序來排列,像連接池中可以應用。LinkedHashMap實現與HashMap的不同之處在于,后者維護著一個運行于所有條目的雙重鏈表。此鏈接列表定義了迭代順序,該迭代順序可以是插入順序或者是訪問順序。對于LinkedHashMap而言,它繼承與HashMap、底層使用哈希表與雙向鏈表來保存所有元素。其基本操作與父類HashMap相似,它通過重寫父類相關的方法,來實現自己的鏈接列表特性。

???? TreeMap實現SortMap接口,內部實現是紅黑樹。能夠把它保存的記錄根據鍵排序默認是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。TreeMap不允許key的值為null。非同步的。?

???? 一般情況下,我們用的最多的是HashMap,HashMap里面存入的鍵值對在取出的時候是隨機的,它根據鍵的HashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
???? TreeMap取出來的是排序后的鍵值對。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。
???? LinkedHashMap 是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實現,它還可以按讀取順序來排列,像連接池中可以應用。?

復制代碼
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.TreeMap;public class MapTest {public static void main(String[] args) {//HashMapHashMap<String,String> hashMap = new HashMap();hashMap.put("4", "d");hashMap.put("3", "c");hashMap.put("2", "b");hashMap.put("1", "a");Iterator<String> iteratorHashMap = hashMap.keySet().iterator();System.out.println("HashMap-->");while (iteratorHashMap.hasNext()){Object key1 = iteratorHashMap.next();System.out.println(key1 + "--" + hashMap.get(key1));}//LinkedHashMapLinkedHashMap<String,String> linkedHashMap = new LinkedHashMap();linkedHashMap.put("4", "d");linkedHashMap.put("3", "c");linkedHashMap.put("2", "b");linkedHashMap.put("1", "a");Iterator<String> iteratorLinkedHashMap = linkedHashMap.keySet().iterator();System.out.println("LinkedHashMap-->");while (iteratorLinkedHashMap.hasNext()){Object key2 = iteratorLinkedHashMap.next();System.out.println(key2 + "--" + linkedHashMap.get(key2));}//TreeMapTreeMap<String,String> treeMap = new TreeMap();treeMap.put("4", "d");treeMap.put("3", "c");treeMap.put("2", "b");treeMap.put("1", "a");Iterator<String> iteratorTreeMap = treeMap.keySet().iterator();System.out.println("TreeMap-->");while (iteratorTreeMap.hasNext()){Object key3 = iteratorTreeMap.next();System.out.println(key3 + "--" + treeMap.get(key3));}}}
復制代碼

輸出結果:

復制代碼
HashMap-->
3--c
2--b
1--a
4--d
LinkedHashMap-->
4--d
3--c
2--b
1--a
TreeMap-->
1--a
2--b
3--c
4--d
復制代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274048.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274048.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274048.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle 事務測試

此文章是根據官方改變 模擬帳戶轉賬流程1.JOHN帳戶扣除-DAVID帳戶增加-記錄日志&#xff0d;事務提交三個操作必須全部完成此事務才完成&#xff0c;否則失敗創建帳戶余額表自增字段自增序列&#xff1b;createsequencesaving_seqincrementby1startwith1maxvalue99999999999999…

apt-get 獲取源碼的方法

apt-get source gconf-editor –allow-unauthenticated 注&#xff1a;gconf-editor是一個包名&#xff0c;根據自己的需求相應更改即可

Java 集合之自動打包和解包以及泛型

自動打包與解包&#xff1a;泛型&#xff1a;上栗子&#xff1a; TestMap1.java: package com.zhj.www; import java.util.*;public class TestMap {public static void main(String[] args) {Map m1 new HashMap();Map m2 new TreeMap();//m1.put("one", new Inte…

select * from dim.dim_area_no@to_dw

應該是建的有database linksdim是用戶名&#xff0c;dim_area_no是表名&#xff0c;to_dw 是建的database links的名&#xff0c;dim_area_no表屬于dim用戶創建database links的作用是連接其他數據庫的表select * from dim.dim_area_noto_dw 這個語句的作用是查詢屬于dim用戶的…

ios 內存管理 心得

- alloc, copy, retain會把引用計數1 - release會把引用計數-1 - 局部變量如果初始化時不是autorelease的&#xff0c;要及時調用release釋放&#xff0c;并且賦值為nil否則引用仍然存在導致下次無法用nil做是否有值的判斷 - 實例變量要在每次賦值時要先釋放當前引用的對象再賦…

error while loading shared libraries: xxx.so.x 錯誤的原因和解決辦法

一般我們在Linux下執行某些外部程序的時候可能會提示找不到共享庫的錯誤, 比如: tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 原因一般有兩個, 一個是操作系統里確實沒有包含該共享庫(lib*.…

泗洪高薪行業

泗洪高薪行業轉載于:https://www.cnblogs.com/soundcode/p/3302297.html

libghttp 編譯及封裝使用實例

想用C語言寫個采集程序&#xff0c;涉及到http相關的東西&#xff0c;找了找&#xff0c;有現成的libghttp庫。 libghttp庫的官方網址google一下第一條結果一般就是的&#xff1a;http://lfs.linuxsir.org/htdocs/blfscvs/gnome/libghttp.html 將源碼包下載下來&#xff0c;進…

Java IO 節點流與處理流類型

處理流類型&#xff1a;1、處理流之首先緩沖流&#xff1a;解釋&#xff1a;例子&#xff1a;TestBufferStream1.java package com.zhj.www;import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException;public class TestBufferStream1 …

高級瀏覽器-SRWare Iron 29.0.1600.0 版本發布

SRWare Iron是德國一安全公司srware改造的Chrome&#xff08;鉻&#xff09;命名為鐵&#xff08;iron&#xff09;的瀏覽器。于2008年9月18日首次發布。 據官方介紹&#xff0c;Iron瀏覽器砍掉了Chromium原程序中的很多有礙“隱私”問題的代碼。 “iron中去除的功能包括&#…

shell中的${},##和%%的使用

假設我們定義了一個變量為&#xff1a; file/dir1/dir2/dir3/my.file.txt 可以用${ }分別替換得到不同的值&#xff1a; ${file#*/}&#xff1a;刪掉第一個 / 及其左邊的字符串&#xff1a;dir1/dir2/dir3/my.file.txt ${file##*/}&#xff1a;刪掉最后一個 / 及其左邊的字…

Java 線程多線程編程1---基礎

1、線程的基本概念例子&#xff1a;分析&#xff1a;2、線程的創建和啟動第一種線程的創建&#xff1a;定義一個線程類來實現Runner接口 例子&#xff1a; package com.zhj.www; import java.lang.Thread; public class TestThread1 {public static void main(String[] args) {…

移動互聯網下一步:“深度學習”配合大數據

隨著電子商務不斷深入&#xff0c;百度、騰訊、阿里巴巴的移動互聯網戰略的可比性越來月低&#xff0c;如今百度的移動互聯網的戰略也面臨挑戰&#xff0c;最大的因素在于數據的來源。 對于互聯網的公司最近的動態是什么&#xff1f;這個不是很難的&#xff0c;主要看一下公司的…

windows掛載linux網絡文件系統NFS

ubuntu上安裝配置nfs服務 #apt-get install nfs-kernel-server #mkdir /home/nfs #vim /etc/exports 在文檔的最后一行加入/home/nfs *(rw,sync,no_root_squash,no_subtree_check)&#xff0c;保存退出。 #/etc/init.d/rpcbind restart 重啟rpcbind #/etc/init.d/nfs-kern…

SQL的連接分為三種:內連接、外連接、交叉連接。

先給出兩張表&#xff1a;一、內連接&#xff1a;內連接&#xff08;INNER JOIN&#xff09;&#xff1a;有兩種&#xff0c;顯式的和隱式的&#xff0c;返回連接表中符合連接條件和查詢條件的數據行。&#xff08;所謂的鏈接表就是數據庫在做查詢形成的中間表&#xff09;。1、…

如何在使用摩托羅拉上的RSS閱讀器應用進行一次訂閱

訂閱一個CSDN的RSS為例。 1、打開RSS閱讀器。 2、設置->新增訂閱->手動新增 訂閱URL:輸入http://articles.csdn.net/api/rss.php?tid1000 &#xff08;可以先在PC上打開下該網頁&#xff0c;發現他是一個xml網頁。&#xff09; 訂閱名稱&#xff1a;自己起一個名字&…

RTP與RTCP協議介紹

本文轉自&#xff1a;http://blog.51cto.com/zhangjunhd/25481 1&#xff0e;流媒體( Streaming Media) 1.1流媒體概念 流媒體技術是網絡技術和多媒體技術發展到一定階段的產物。術語流媒體既可以指在網上傳輸連續時基媒體的流式技術,也可以指使用流式技術的連續時基媒體本身…

JSP學習

一、JSP 簡介 什么是Java Server Pages? JSP全稱Java Server Pages&#xff0c;是一種動態網頁開發技術。它使用JSP標簽在HTML網頁中插入Java代碼。標簽通常以<%開頭以%>結束。 JSP是一種Java servlet&#xff0c;主要用于實現Java web應用程序的用戶界面部分。網頁開發…

Java給定一個字符串數組,判斷每個字符出現次數

題目要求&#xff1a;給定一個字符串&#xff0c;判斷每個字符出現多少次&#xff1f; 解決思路&#xff1a;利用Map的特性&#xff1a;即Map集合中如果兩個key&#xff08;鍵&#xff09;值是一樣相同的&#xff0c;那么&#xff0c;后放&#xff08;put&#xff09;入的值會將…

Java-n個人報數

題目&#xff1a; 有n個人圍成一圈&#xff0c;順序排號。從第一個人開始報數&#xff08;從1到3報數&#xff09;&#xff0c;凡報到3的人退出圈子&#xff0c;問最后留下的是原來第幾號的哪一位&#xff1f; 大概思路&#xff1a;假設有3個人&#xff0c;它們圍成一圈&#x…