Java常用資料結構總結
資料元素相互之間的關係稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構;
集合結構:除了同屬於一種類型外,別無其它關係
線性結構:元素之間存在一對一關係常見型別有: 陣列,連結串列,佇列,棧,它們之間在操作上有所區別.例如:連結串列可在任意位置插入或刪除元素,而佇列在隊尾插入元素,隊頭刪除元素,棧只能在棧頂進行插入,刪除操作.
樹形結構:元素之間存在一對多關係,常見型別有:樹(有許多特例:二叉樹、平衡二叉樹、查詢樹等)
圖形結構:元素之間存在多對多關係,圖形結構中每個結點的前驅結點數和後續結點多個數可以任意
Java中有幾種常用的資料結構,主要分為Collection和Map兩個主要介面,而程式中最終使用的資料結構是繼承自這些介面的資料結構類。其主要關係:
1、幾個常用類的區別:
1.ArrayList: 元素單個,效率高,多用於查詢
2.Vector: 元素單個,執行緒安全,多用於查詢
3.LinkedList:元素單個,多用於插入和刪除
4.HashMap: 元素成對,元素可為空
5.HashTable: 元素成對,執行緒安全,元素不可為空
二、Vector、ArrayList和LinkedList
大多數情況下,從效能上來說ArrayList最好,但是當集合內的元素需要頻繁插入、刪除時LinkedList會有比較好的表現,但是它們三個效能都比不上陣列,另外Vector是執行緒同步的。所以:如果能用陣列的時候(元素型別固定,陣列長度固定),請儘量使用陣列來代替List;
如果沒有頻繁的刪除插入操作,又不用考慮多執行緒問題,優先選擇ArrayList;
如果在多執行緒條件下使用,可以考慮Vector;
如果需要頻繁地刪除插入,LinkedList就有了用武之地;
如果你什麼都不知道,用ArrayList沒錯。
三、Collections和Arrays
在 Java集合類框架裡有兩個類叫做Collections(注意,不是Collection!)和Arrays,這是JCF裡面功能強大的工具,但初學者往往會忽視。按JCF文件的說法,這兩個類提供了封裝器實現(Wrapper Implementations)、資料結構演算法和陣列相關的應用。想必大家不會忘記上面談到的“折半查詢”、“排序”等經典演算法吧,Collections類提供了豐富的靜態方法幫助我們輕鬆完成這些在資料結構課上煩人的工作:
binarySearch:折半查詢。
sort:排序,這裡是一種類似於快速排序的方法,效率仍然是O(n * log n),但卻是一種穩定的排序方法。
reverse:將線性表進行逆序操作,這個可是從前資料結構的經典考題哦!
rotate:以某個元素為軸心將線性表“旋轉”。
swap:交換一個線性表中兩個元素的位置。
……
Collections還有一個重要功能就是“封裝器”(Wrapper),它提供了一些方法可以把一個集合轉換成一個特殊的集合,如下:
unmodifiableXXX:轉換成只讀集合,這裡XXX代表六種基本集合介面:Collection、List、Map、Set、SortedMap和SortedSet。如果你對只讀集合進行插入刪除操作,將會丟擲UnsupportedOperationException異常。
synchronizedXXX:轉換成同步集合。
singleton:建立一個僅有一個元素的集合,這裡singleton生成的是單元素Set,
singletonList和singletonMap分別生成單元素的List和Map。
空集:由Collections的靜態屬性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。
關注微信公眾號和今日頭條,精彩文章持續更新中。。。。。
相關推薦
Java常用資料結構總結
資料元素相互之間的關係稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構;集合結構:除了同屬於一種類型外,別無其它關係線性結構:元素之間存在一對一關係常見型別有: 陣列,連結串列,佇列,棧,它
java常用資料結構基礎知識總結(二)
在上一篇中,和大家交流了java常用資料結構的基礎知識。現在與大家分享各類資料結構的遍歷問題、轉換問題。 一、遍歷問題 (1) List的遍歷問題(以ArrayList為例) ①通過迭代器遍歷 public static void traverseArr
Java常用資料結構之List
JDK 11正式釋出了,Oracle終於出了一個長期維護版本,應該將是繼JDK 8之後的一個常規使用版本。 前言 作為Java系開發者對Java集合類的使用應該是較為頻繁的,也是面試中經常會被問的問題。一直想整理一下Java集合和Android中的優化集合類,借這次機會
Java的資料結構總結
Java 基本資料型別總結 在Java的程式碼重構中,我們不得不承認若是不瞭解jvm的記憶體原理或是資料型別,我們根本讀不懂那些亂七八糟的資料引數。 變數就是申請記憶體來儲存值。也就是說,當建立變數的時候,需要在記憶體中申請空間;記憶體管理系統根據變數的型別為變數分配儲存空間
幾張動態圖捋清Java常用資料結構及其設計原理
最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向連結串列不再是迴環的. HashMap中的單鏈表是尾插,
Java常用資料結構之Set之TreeSet
前言 上篇文章我們分析了HashSet,它是基於HashMap實現的,那TreeSet會是怎麼實現的呢?沒錯!和大家想的一樣,它是基於TreeMap實現的。所以,TreeSet的原始碼也很簡單,主要還是理解TreeMap。 TreeSet的繼承關係 按照慣例,先來看TreeSet類的繼承關係: pub
常用資料結構總結(基於C++)
棧(stack) 簡介 棧是一種只能在一端進行插入或者刪除操作的線性表。其中允許進行插入或者刪除操作的一端稱為棧頂。棧的插入和刪除一般叫入棧和出棧。棧的順序儲存結構叫做順序棧,棧的鏈式儲存結構叫做鏈棧。 C++中棧的標頭檔案為<stack> 宣告 stack<資
面試-8種 常用資料結構總結
1976年,一個瑞士電腦科學家寫一本書《Algorithms + Data Structures = Programs》。即:演算法 + 資料結構 = 程式。40多年過去了,這個等式依然成立。 很多程式碼面試題都要求候選者深入理解資料結構,不管你來自大學計算機專業還是程式設計培訓機構,也不管你有
Java常用資料結構(個人筆記)
寫在前面: 樓主剛打完ACM徐州現場賽,也算是退役了,現在準備重新補一遍Java,之前一直用的是C++,所以我會結合C++來整理Java的資料結構,同時也便於理解。 那麼我將按照以下順序進行講解,感覺難度也是逐步提升 ArrayList、Vector和Lin
Java常用資料結構之Stack&Vector
前言 繼續Java常用資料結構分析之路,這次的主角是Stack和Vector。Vector已經不推薦使用了,可以用ArrayList和LinkedList替代,它的主要特色是執行緒安全,代價自然就是效率。Stack則是擁有先進後出的特性,在特定的環境下能很好的工作。這兩個類相較於List和Map的使用頻率要
圖解Java常用資料結構(一)\JDK原始碼分析(二)——LinkedList
最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向列表不再是迴環的. HashMap中的單鏈表
Java常用資料結構之Map-HashMap
前言 上篇文章中介紹了AbstractMap抽象類,本文就來分析一下HashMap類。jdk1.8對HashMap進行了大幅優化。在jdk1.8之前,HashMap的實現是陣列+連結串列,即通過拉鍊法來解決Hash衝突。假設連結串列的長度為n,則連結串列中查詢元
JAVA常用資料結構及原理分析
java.util包中三個重要的介面及特點:List(列表)、Set(保證集合中元素唯一)、Map(維護多個key-value鍵值對,保證key唯一)。其不同子類的實現各有差異,如是否同步(執行緒安全)、是否有序。 常用類繼承樹: 以下結合原始碼講解常用類實現原理及相互之間
資料結構與演算法——常用資料結構及其Java實現
前言 彷彿一下子,2017年就快過去一半了,研一馬上就要成為過去式了,我打算抓住研一的尾巴,好好梳理一下資料結構與演算法,畢竟這些基礎知識是很重要的嘛。所以準備在這裡搞一個系列的文章,以期透徹。 本系列將採用Java語言來進行描述。亦即總結常見的的資料結構,以及在J
Unity3D中常用的資料結構總結與分析
來到週末,小匹夫終於有精力和時間來更新下部落格了。前段時間小匹夫讀過一份程式碼,對其中各種資料結構靈活的使用讚不絕口,同時也大大激發了小匹夫對各種資料結構進行梳理和總結的慾望。正好最近也拜讀了若干大神的文章,覺得總結下常用的資料結構以供自己也能靈活的使用變得刻不容緩。那麼還是從小匹夫的工作內容入手,就談談在平
筆試題目總結之二——常用資料結構與演算法
資料結構與演算法,這個部分的內容其實是十分的龐大,要想都覆蓋到不太容易。在校學習階段我們可能需要對每種結構,每種演算法都學習,但是找工作筆試或者面試的時候,要在很短的時間內考察一個人這方面的能力,把每種結構和演算法都問一遍不太現實。所以,實際的情況是,企業一般考察一些看起來
陣列、連結串列等常用資料結構和集合淺解(java)
簡單理解:多人在操作同一個容器時,每個人修改裡面的元素時其實是複製出來一個新的容器 ,然後在新的容器上進行修改,修改完將新的容器賦給原來容器的引用,而這個過程中很多人在同步做讀取的動作,但是他們讀取的是舊的容器元素,新的內容他們未能取得,這樣就讀寫分離了,不會產生衝突,但是新舊元素不能保持一致。
java 中幾種常用資料結構
Java中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面只提供方法,並不提供實現),而程式中最終使用的資料結構是繼承自這些介面的資料結構類。 一、幾個常用類的區別 1.ArrayList: 元素單個,效率高,多用於查詢 2.Ve
常用資料結構和演算法操作效率的對比總結
歡迎關注我新搭建的部落格:[http://www.itcodai.com/](http://www.itcodai.com/) 前面介紹了經典的資料結構和演算法,這一節我們對這些資料結構和演算法做一個總結,具體細節,請參見各個章節的詳細介紹,這裡我們用表
常用資料結構與排序演算法實現、適用場景及優缺點(Java)
1.下壓棧(後進先出)(能夠動態調整陣列大小的實現): package Chapter1_3Text; import java.util.Iterator; public class ResizingArrayStack<Item> implements