首頁 Java Java入門 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.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles