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

首頁 Java Java入門 java數(shù)據(jù)結(jié)構(gòu)有哪些

java數(shù)據(jù)結(jié)構(gòu)有哪些

Apr 12, 2021 pm 02:34 PM
java 數(shù)據(jù)結(jié)構(gòu)

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

java數(shù)據(jù)結(jié)構(gòu)有哪些

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

Java中有幾種常用的數(shù)據(jù)結(jié)構(gòu),主要分為Collection和map兩個主要接口(接口只提供方法,并不提供實現(xiàn)),而程序中最終使用的數(shù)據(jù)結(jié)構(gòu)是繼承自這些接口的數(shù)據(jù)結(jié)構(gòu)類。

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

List(接口)

List是有序的Collection,使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下 >標)來訪問List中的元素,這類似于Java的數(shù)組。

Vector

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

ArrayList

同Vector一樣是一個基于數(shù)組上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是當運行到多線程環(huán)境中時,可需要自己在管理線程的同步問題。

LinkedList

LinkedList不同于前面兩種List,它不是基于數(shù)組的,所以不受數(shù)組性能的限制。?

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

1.節(jié)點本身的數(shù)據(jù)(data);?

2.下一個節(jié)點的信息(nextNode)。?

所以當對LinkedList做添加,刪除動作的時候就不用像基于數(shù)組的ArrayList一樣,必須進行大量的數(shù)據(jù)移動。只要更改nextNode的相關(guān)信息就可以實現(xiàn)了,這是LinkedList的優(yōu)勢。

List總結(jié)

所有的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都實現(xiàn)了Collection接口,但是他們的實現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在 HashMap的基礎上來實現(xiàn)的,這個就是Set和List的根本區(qū)別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項??纯?HashSet的add(Object obj)方法的實現(xiàn)就可以一目了然了。

LinkedHashSet

HashSet的一個子類,一個鏈表。

SortedSet

有序的Set,通過SortedMap來實現(xiàn)的。

Map(接口)

Map 是一種把鍵對象和值對象進行關(guān)聯(lián)的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對于鍵對象來說,像Set一樣,一個 Map容器中的鍵對象不允許重復,這是為了保持查找結(jié)果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的并不是你想的那個值對象,結(jié)果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質(zhì)的。

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

(免費視頻教程分享:java視頻教程

HashMap

基于哈希表的 Map 接口的實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恒久不變。另外,HashMap是非線程安全的,也就是說在多線程的環(huán)境下,可能會存在問題,而Hashtable是線程安全的。

TreeMap

TreeMap則是對鍵按序存放,

HashTable

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

(2)Hashtable 繼承于Dictionary,實現(xiàn)了Map、Cloneable、java.io.Serializable接口。

(3)Hashtable 的函數(shù)都是同步的,這意味著它是線程安全的。它的key、value都不可以為null。

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

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

2.Vector: 元素單個,線程安全,多用于查詢?

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

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

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

Vector、ArrayList和LinkedList?

大多數(shù)情況下,從性能上來說ArrayList最好,但是當集合內(nèi)的元素需要頻繁插入、刪除時LinkedList會有比較好的表現(xiàn),但是它們?nèi)齻€性能都比不上數(shù)組,另外Vector是線程同步的。所以:?

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

如果沒有頻繁的刪除插入操作,又不用考慮多線程問題,優(yōu)先選擇ArrayList;?

如果在多線程條件下使用,可以考慮Vector;?

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

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

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

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

隊列

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

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

數(shù)組

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

據(jù)元素的集合稱為數(shù)組。在C語言中, 數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組

元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指

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

鏈表

一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。

鏈表由一系列結(jié)點(鏈表中每一個元素稱為結(jié)點)組成,結(jié)點可以在運行時動態(tài)生成。每個結(jié)點包括兩個部分:

一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點地址的指針域。

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

(1)有且僅有一個結(jié)點 k0,他對于關(guān)系N來說沒有前驅(qū),稱K0為樹的根結(jié)點。簡稱為根(root)

(2)除K0外,k中的每個結(jié)點,對于關(guān)系N來說有且僅有一個前驅(qū)。

(3)K中各結(jié)點,對關(guān)系N來說可以有m個后繼(m>=0)。

在計算機科學中,堆是一種特殊的樹形數(shù)據(jù)結(jié)構(gòu),每個結(jié)點都有一個值。通常我們所說的堆的數(shù)據(jù)結(jié)構(gòu),是指

二叉堆。堆的特點是根結(jié)點的值最?。ɑ蜃畲螅?,且根結(jié)點的兩個子樹也是一個堆。

散列表

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

這個對應關(guān)系f為散列函數(shù)(Hash function),按這個思想建立的表為散列表。

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

以上是java數(shù)據(jù)結(jié)構(gòu)有哪些的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

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

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

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

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(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)絡端口和防火墻 了解網(wǎng)絡端口和防火墻 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)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存泄漏風險。1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對象被標記為垃圾。2.基于標記-清除算法,標記所有可達對象,清除未標記對象。3.采用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。4.JVM提供多種GC器:SerialGC適用于小型應用;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

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

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

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

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

See all articles