搜尋
首頁JavaJava入門java資料結構有哪些

java資料結構有哪些

Apr 12, 2021 pm 02:34 PM
java資料結構

java資料結構有:1、List;2、Vector;3、ArrayList;4、LinkedList;5、Set;6、HashSet;7、LinkedHashSet;8、SortedSet;9、Map;10、HashMap 。

java資料結構有哪些

本文操作環境:windows10系統、java 1.8、thinkpad t480電腦。

Java中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面只提供方法,並沒有提供實作),而程式中最終使用的資料結構是繼承自這些介面的資料結構類別。

Collection---->Collections   
Map----->SortedMap------>TreeMap          Map------>HashMap
Collection---->List----->(Vector \ ArryList \ LinkedList)
Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)

List(介面)

List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。使用者能夠使用索引(元素在List中的位置,類似於數組下 >標)來存取List中的元素,這類似於Java的陣列。

Vector

基於數組(Array)的List,其實就是封裝了數組所不具備的一些功能方便我們使用,所以它難易避免數組的限制,同時性能也不可能超越數組。所以,在可能的情況下,我們要多運用數組。另外很重要的一點就是Vector是線程同步的(sychronized)的,這也是Vector和ArrayList 的一個的重要區別。 

ArrayList

同Vector一樣是基於陣列上的鍊錶,但是不同的是ArrayList不是同步的。所以在效能上要比Vector好一些,但是當運行到多執行緒環境中時,可需要自己在管理執行緒的同步問題。

LinkedList

LinkedList不同於前面兩種List,它不是基於陣列的,所以不受陣列效能的限制。

它每一個節點(Node)都包含兩方面的內容: 

1.節點本身的資料(data); 

2.下一個節點的資訊( nextNode)。 

所以當對LinkedList做添加,刪除動作的時候就不用像基於陣列的ArrayList一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了,這是LinkedList的優點。

List總結

所有的List中只能容納單一不同類型的物件所組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ]

所有的List中可以有相同的元素,例如Vector中可以有[ tom,koo,too,koo ]

所有的List中可以有null元素,例如[ tom,null,1 ]

基於Array的List(Vector,ArrayList)適合查詢,而LinkedList 適合添加,刪除操作

##Set(介面)

Set是不包含重複元素的Collection

HashSet

雖然Set同List都實作了Collection接口,但是他們的實作方式卻大不一樣。 List基本上都是以Array為基礎。但是Set則是在 HashMap的基礎上來實現的,這個就是Set和List的根本差別。 HashSet的儲存方式是把HashMap中的Key當作Set的對應儲存項目。看看 HashSet的add(Object obj)方法的實作就可以一目了然了。

LinkedHashSet

HashSet的一個子類,一個鍊錶。

SortedSet

有序的Set,透過SortedMap來實現的。

Map(介面)

Map 是一種把鍵物件和值物件進行關聯的容器,而一個值物件又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set一樣,一個Map容器​​中的鍵對像不允許重複,這是為了保持查找結果的一致性;如果有兩個鍵對像一樣,那麼你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。

當然在使用過程中,某個鍵所對應的值物件可能會發生變化,這時會依照最後一次修改的值物件與鍵對應。對於值物件沒有唯一性的要求,你可以將任意多個鍵都對應到一個值物件上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值物件)。

(免費影片教學分享:

java影片教學

HashMap

基於雜湊表的 Map 介面的實作。此實作提供所有可選的映射操作,並允許使用 null 值和 null 鍵。 (除了不同步且允許使用 null 之外,HashMap 類別與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。另外,HashMap是非執行緒安全的,也就是說在多執行緒的環境下,可能會有問題,而Hashtable是執行緒安全的。

TreeMap

TreeMap則是對鍵依序存放,

HashTable

(1)Hashtable 是散列列表,它儲存的內容是鍵值對(key-value)映射。

(2)Hashtable 繼承於Dictionary,實作了Map、Cloneable、java.io.Serializable介面。

(3)Hashtable 的函數都是同步的,這表示它是執行緒安全的。它的key、value都不可以為null。

幾個常用類別的區別 

1. ArrayList: 元素單一,效率高,多用於查詢 

2. Vector: 元素單一,執行緒安全,多用於查詢 

3. LinkedList:元素單個,多用於插入和刪除 

4. HashMap: 元素成對,元素可為空 

5. HashTable: 元素成對,線程安全,元素不可為空 

Vector、ArrayList和LinkedList 

大多數情況下,從效能上來說ArrayList最好,但是當集合內的元素需要頻繁插入、刪除時LinkedList會有比較好的表現,但是它們三個效能都比不上數組,另外Vector是執行緒同步的。所以: 

如果能用數組的時候(元素型別固定,數組長度固定),請盡量使用數組來代替List; 

如果沒有頻繁的刪除插入操作,又不用考慮多執行緒問題,優先選擇ArrayList; 

如果在多執行緒條件下使用,可以考慮Vector; 

如果需要頻繁地刪除插入,LinkedList就有了用武之地; 

如果你什麼都不知道,用ArrayList沒錯。 

堆疊

堆疊是只能在某一端插入和刪除的特殊線性表。它按照先進後出的原則儲存數據,先進入的數據被壓入棧底,最後

的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。

隊列

一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行

插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。

陣列

在程式設計中,為了處理方便, 把具有相同類型的若干變數依照有序的形式組織起來。這些按序排列的同類數

據元素的集合稱為數組。在C語言中,數組屬於構造資料型態。一個陣列可以分解為多個陣列元素,這些陣列

元素可以是基本資料型別或是建構型別。因此依數組元素的類型不同,數組又可分為數值數組、字元數組、指

針數組、結構數組等各種類別。

鍊錶

一種實體儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是透過鍊錶中的指標連結順序來實現的。

鍊錶由一系列結點(鍊錶中每一個元素稱為結點)組成,結點可以在運行時動態產生。每個結點包括兩個部分:

一個是儲存資料元素的資料域,另一個是儲存下一個結點位址的指標域。

樹是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關係N,N滿足以下條件:

(1)有且僅有一個結點k0,他對於關係N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)

(2)除K0外,k中的每個結點,對於關係N來說有且僅有一個前驅。

(3)K中各結點,對關係N來說可以有m個後繼(m>=0)。

在電腦科學中,堆是一種特殊的樹狀資料結構,每個結點都有一個值。通常我們所說的堆的資料結構,是指

二叉堆。堆的特徵是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

散列表

若結構中存在關鍵字和K相等的記錄,則必定在f(K)的儲存位置上。由此,不需比較便可直接取得所查記錄。稱

這個對應關係f為雜湊函數(Hash function),依這個想法建立的表為散列表。

相關推薦:java面試題目及答案

#

以上是java資料結構有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。