国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) Java Java入門 java資料結(jié)構(gòu)有哪些

java資料結(jié)構(gòu)有哪些

Apr 12, 2021 pm 02:34 PM
java 資料結(jié)構(gòu)

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

java資料結(jié)構(gòu)有哪些

本文操作環(huán)境:windows10系統(tǒng)、java 1.8、thinkpad t480電腦。

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

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

List(介面)

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

Vector

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

ArrayList

同Vector一樣是基於陣列上的鍊錶,但是不同的是ArrayList不是同步的。所以在效能上要比Vector好一些,但是當(dāng)運(yùn)行到多執(zhí)行緒環(huán)境中時(shí),可需要自己在管理執(zhí)行緒的同步問(wèn)題。

LinkedList

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

它每一個(gè)節(jié)點(diǎn)(Node)都包含兩方面的內(nèi)容:?

1.節(jié)點(diǎn)本身的資料(data);?

2.下一個(gè)節(jié)點(diǎn)的資訊( nextNode)。?

所以當(dāng)對(duì)LinkedList做添加,刪除動(dòng)作的時(shí)候就不用像基於陣列的ArrayList一樣,必須進(jìn)行大量的資料移動(dòng)。只要更改nextNode的相關(guān)資訊就可以實(shí)現(xiàn)了,這是LinkedList的優(yōu)點(diǎn)。

List總結(jié)

所有的List中只能容納單一不同類型的物件所組成的表,而不是Key-Value鍵值對(duì)。例如:[ 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都實(shí)作了Collection接口,但是他們的實(shí)作方式卻大不一樣。 List基本上都是以Array為基礎(chǔ)。但是Set則是在 HashMap的基礎(chǔ)上來(lái)實(shí)現(xiàn)的,這個(gè)就是Set和List的根本差別。 HashSet的儲(chǔ)存方式是把HashMap中的Key當(dāng)作Set的對(duì)應(yīng)儲(chǔ)存項(xiàng)目??纯?HashSet的add(Object obj)方法的實(shí)作就可以一目了然了。

LinkedHashSet

HashSet的一個(gè)子類,一個(gè)鍊錶。

SortedSet

有序的Set,透過(guò)SortedMap來(lái)實(shí)現(xiàn)的。

Map(介面)

Map 是一種把鍵物件和值物件進(jìn)行關(guān)聯(lián)的容器,而一個(gè)值物件又可以是一個(gè)Map,依次類推,這樣就可形成一個(gè)多級(jí)映射。對(duì)於鍵對(duì)象來(lái)說(shuō),像Set一樣,一個(gè)Map容器??中的鍵對(duì)像不允許重複,這是為了保持查找結(jié)果的一致性;如果有兩個(gè)鍵對(duì)像一樣,那麼你想得到那個(gè)鍵對(duì)象所對(duì)應(yīng)的值對(duì)象時(shí)就有問(wèn)題了,可能你得到的並不是你想的那個(gè)值對(duì)象,結(jié)果會(huì)造成混亂,所以鍵的唯一性很重要,也是符合集合的性質(zhì)的。

當(dāng)然在使用過(guò)程中,某個(gè)鍵所對(duì)應(yīng)的值物件可能會(huì)發(fā)生變化,這時(shí)會(huì)依照最後一次修改的值物件與鍵對(duì)應(yīng)。對(duì)於值物件沒(méi)有唯一性的要求,你可以將任意多個(gè)鍵都對(duì)應(yīng)到一個(gè)值物件上,這不會(huì)發(fā)生任何問(wèn)題(不過(guò)對(duì)你的使用卻可能會(huì)造成不便,你不知道你得到的到底是那一個(gè)鍵所對(duì)應(yīng)的值物件)。

(免費(fèi)影片教學(xué)分享:

java影片教學(xué)

HashMap

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

TreeMap

TreeMap則是對(duì)鍵依序存放,

HashTable

(1)Hashtable 是散列列表,它儲(chǔ)存的內(nèi)容是鍵值對(duì)(key-value)映射。

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

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

幾個(gè)常用類別的區(qū)別?

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

2. Vector: 元素單一,執(zhí)行緒安全,多用於查詢?

3. LinkedList:元素單個(gè),多用於插入和刪除?

4. HashMap: 元素成對(duì),元素可為空?

5. HashTable: 元素成對(duì),線程安全,元素不可為空?

Vector、ArrayList和LinkedList?

大多數(shù)情況下,從效能上來(lái)說(shuō)ArrayList最好,但是當(dāng)集合內(nèi)的元素需要頻繁插入、刪除時(shí)LinkedList會(huì)有比較好的表現(xiàn),但是它們?nèi)齻€(gè)效能都比不上數(shù)組,另外Vector是執(zhí)行緒同步的。所以:?

如果能用數(shù)組的時(shí)候(元素型別固定,數(shù)組長(zhǎng)度固定),請(qǐng)盡量使用數(shù)組來(lái)代替List;?

如果沒(méi)有頻繁的刪除插入操作,又不用考慮多執(zhí)行緒問(wèn)題,優(yōu)先選擇ArrayList;?

如果在多執(zhí)行緒條件下使用,可以考慮Vector;?

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

如果你什麼都不知道,用ArrayList沒(méi)錯(cuò)。?

堆疊

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

的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開(kāi)始彈出數(shù)據(jù)(最後一個(gè)數(shù)據(jù)被第一個(gè)讀出來(lái))。

隊(duì)列

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

插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。隊(duì)列中沒(méi)有元素時(shí),稱為空隊(duì)列。

陣列

在程式設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干變數(shù)依照有序的形式組織起來(lái)。這些按序排列的同類數(shù)

據(jù)元素的集合稱為數(shù)組。在C語(yǔ)言中,數(shù)組屬於構(gòu)造資料型態(tài)。一個(gè)陣列可以分解為多個(gè)陣列元素,這些陣列

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

針數(shù)組、結(jié)構(gòu)數(shù)組等各種類別。

鍊錶

一種實(shí)體儲(chǔ)存單元上非連續(xù)、非順序的儲(chǔ)存結(jié)構(gòu),資料元素的邏輯順序是透過(guò)鍊錶中的指標(biāo)連結(jié)順序來(lái)實(shí)現(xiàn)的。

鍊錶由一系列結(jié)點(diǎn)(鍊錶中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)產(chǎn)生。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:

一個(gè)是儲(chǔ)存資料元素的資料域,另一個(gè)是儲(chǔ)存下一個(gè)結(jié)點(diǎn)位址的指標(biāo)域。

樹(shù)

樹(shù)是包含n(n>0)個(gè)結(jié)點(diǎn)的有窮集合K,且在K中定義了一個(gè)關(guān)係N,N滿足以下條件:

(1)有且僅有一個(gè)結(jié)點(diǎn)k0,他對(duì)於關(guān)係N來(lái)說(shuō)沒(méi)有前驅(qū),稱K0為樹(shù)的根結(jié)點(diǎn)。簡(jiǎn)稱為根(root)

(2)除K0外,k中的每個(gè)結(jié)點(diǎn),對(duì)於關(guān)係N來(lái)說(shuō)有且僅有一個(gè)前驅(qū)。

(3)K中各結(jié)點(diǎn),對(duì)關(guān)係N來(lái)說(shuō)可以有m個(gè)後繼(m>=0)。

在電腦科學(xué)中,堆是一種特殊的樹(shù)狀資料結(jié)構(gòu),每個(gè)結(jié)點(diǎn)都有一個(gè)值。通常我們所說(shuō)的堆的資料結(jié)構(gòu),是指

二叉堆。堆的特徵是根結(jié)點(diǎn)的值最小(或最大),且根結(jié)點(diǎn)的兩個(gè)子樹(shù)也是一個(gè)堆。

散列表

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

這個(gè)對(duì)應(yīng)關(guān)係f為雜湊函數(shù)(Hash function),依這個(gè)想法建立的表為散列表。

相關(guān)推薦:java面試題目及答案

#

以上是java資料結(jié)構(gòu)有哪些的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過(guò)LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過(guò)DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過(guò)Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動(dòng)管理內(nèi)存的機(jī)制,通過(guò)回收不可達(dá)對(duì)象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險(xiǎn)。 1.GC從根對(duì)象(如棧變量、活動(dòng)線程、靜態(tài)字段等)出發(fā)判斷對(duì)象可達(dá)性,無(wú)法到達(dá)的對(duì)像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對(duì)象,清除未標(biāo)記對(duì)象。 3.採(cǎi)用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時(shí)較長(zhǎng)的MajorGC;Metaspace存儲(chǔ)類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

以身作則,解釋說(shuō)明 以身作則,解釋說(shuō)明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時(shí)立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個(gè)defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會(huì)執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

使用HTML'輸入類型”作為用戶數(shù)據(jù) 使用HTML'輸入類型”作為用戶數(shù)據(jù) Aug 03, 2025 am 11:07 AM

選擇合適的HTMLinput類型能提升數(shù)據(jù)準(zhǔn)確性、增強(qiáng)用戶體驗(yàn)並提高可用性。 1.根據(jù)數(shù)據(jù)類型選用對(duì)應(yīng)input類型,如text、email、tel、number和date,可實(shí)現(xiàn)自動(dòng)校驗(yàn)和適配鍵盤;2.利用HTML5新增類型如url、color、range和search,可提供更直觀的交互方式;3.配合使用placeholder和required屬性,可提升表單填寫效率和正確率,但需注意placeholder不能替代label。

See all articles