java集合框架聯繫小圖,集合的框架圖

本文目錄一覽:

求大神,java的集合框架是什麼意思?

Java平台提供了一個全新的集合框架。「集合框架」主要由一組用來操作對象的介面組成。不同介面描述一組不同數據類型。

Java 2集合框架圖

集合介面:6個介面(短虛線表示),表示不同集合類型,是集合框架的基礎。

抽象類:5個抽象類(長虛線表示),對集合介面的部分實現。可擴展為自定義集合類。

實現類:8個實現類(實線表示),對介面的具體實現。

在很大程度上,一旦您理解了介面,您就理解了框架。雖然您總要創建介面特定的實現,但訪問實際集合的方法應該限制在介面方法的使用上;因此,允許您更改基本的數據結構而不必改變其它代碼。

· Collection 介面是一組允許重複的對象。

· Set 介面繼承 Collection,但不允許重複,使用自己內部的一個排列機制。

· List 介面繼承 Collection,允許重複,以元素安插的次序來放置元素,不會重新排列。

· Map介面是一組成對的鍵-值對象,即所持有的是key-value pairs。Map中不能有重複的key。擁有自己的內部排列機制。

· 容器中的元素類型都為Object。從容器取得元素時,必須把它轉換成原來的類型。

Java 2簡化集合框架圖

集合介面

1.Collection 介面

用於表示任何對象或元素組。想要儘可能以常規方式處理一組元素時,就使用這一介面。

(1) 單元素添加、刪除操作:

 boolean add(Object o):將對象添加給集合

 boolean remove(Object o): 如果集合中有與o相匹配的對象,則刪除對象o

(2) 查詢操作:

 int size() :返回當前集合中元素的數量

 boolean isEmpty() :判斷集合中是否有任何元素

 boolean contains(Object o) :查找集合中是否含有對象o

 Iterator iterator() :返回一個迭代器,用來訪問集合中的各個元素

(3) 組操作 :作用於元素組或整個集合

 boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素

 boolean addAll(Collection c) : 將集合c 中所有元素添加給該集合

 void clear(): 刪除集合中所有元素

 void removeAll(Collection c) : 從集合中刪除集合c 中的所有元素

 void retainAll(Collection c) : 從集合中刪除集合c 中不包含的元素

(4) Collection轉換為Object數組 :

 Object[] toArray() :返回一個內含集合所有元素的array

 Object[] toArray(Object[] a) :返回一個內含集合所有元素的array。運行期返回的array和參數a的型別相同,需要轉換為正確型別。

JAVA的集合框架中有那些類,他們都有那些區別

區別詳解,沒法詳解,數據結構就夠研究幾個月的,不過要是把目標放在會用上,就容易多了,也無需了解底層,看看API文檔,知道什麼方法是幹什麼的會用就行了。

集合類巨多無比,其實常用的也就這麼幾個,其他的都不用太看,你就看看:ArrayList、LinkedList、HashMap、TreeMap、HashSet 就行了,我理解也有限,簡單說一下這幾個:

Collection下面有List和Set,List有ArrayList、LinkedList,ArrayList底層以Object類型數組實現,特點是查找很快,增加或刪除操作很慢,這是由於數組的特點決定的,查找的時候因為有下標,所以你查第一個和查第1000個速度是一樣的,直接就定位過去了,但是刪除或者增加內容時,假如說一個ArrayList裡面有1000個元素,現在把第一個元素刪掉,那就出問題了,從第2個一直到第1000個元素都要

往前移動一個位置,這種移動是非常耗時而且效率是極其低下的。

LinkedList底層是以雙向循環鏈表實現的,特點是查找很慢,但是增加和刪除操作很快,雙向循環鏈表裡面所有元素都是一個一個連在一起的,查找第1000個,就要從第1個開始找到第2個,然後第3個….

但是刪除的時候,直接吧元素就刪了,前後的兩個元素之間在連起來,ok 了。

TreeMap,特點是按照key的升序保存鍵值對,因此插入的時候效率理論上稍慢寫。

HashMap、HashSet,HashSet底層以HashMap實現,HashMap底層以數組實現,當向集合HashSet中使用add方法增加元素的時候,其實會向HashMap中增加一行(key-value),這個key就是增加到Set中的對象,value是一個Object對象,首先調用key的hashCode方法返回一個HashCode值,注意這並不是真正的物理地址,通過將這個值進行散列運算,得到一個int型的數,然後利用此數和數組的長度計算出一個數組的下標值,看看這個位置上有沒有一個對象,如果沒有直接增加進去一個Entry對象,如果有,那麼接著將準備增加到集合中的key與該位置上的對象的key進行equals方法比較,如果該equals方法返回true,說明兩個key的內容相同,會用新的value將舊的value替換掉,put方法會返回這個被替換掉的value,如果equals方法返回false,會調用當前位置上存在的那個Entry對象的next屬性,尋找下一個Entry對象根這個Entry對象的key再進行equals比較…..

Vector和HashTable兩個已經過時了,內部public方法都是同步的,所以效率極其低下,淘汰了,不過面試老考,鬱悶。

java集合類框架中類的組織結構,並說明它們之間的聯繫與區別。

結構圖一樓給出來了,

聯繫:list是可重複的有順序的;set是不重複的無序的;map中的key是不重複的,value是和key一一對應的。

區別:

1. ArrayList是用動態數組實現的,有數組隨機訪問的優點,但插入和刪除操作過多時效率低;LinkedList是用雙向鏈表實現的,插入和刪除操作效率高,但隨機訪問數據不如ArrayList速度快。

2. HashSet是用散列實現的,TreeSet是用紅黑樹(基於二叉平衡樹的變種)實現的,

TreeSet是有序的(這可能與數學中純粹的集合概念不一致,但似乎這世上本就沒有純粹的東西吧),所以放入TreeSet中的對象必須是可比較的,即實現Compareble介面。

3. HashMap和TreeMap,與HashSet、TreeSet類似。

JAVA集合框架的總結

1.數組把對象和數字形式的下標聯繫起來。它持有的是類型確定的對象,這樣提取對象的時候就不用再作類型傳遞了。它可以是多維的,也可以持有primitive。但是創建之後它的容量不能改了。

2.Collection持有單個元素,而Map持有相關聯的pair。

3.和數組一樣,List也把數字下標同對象聯繫起來,你可以把數組和List想成有序的容器。List會隨元素的增加自動調整容量。但是List只能持有Objectreference,所以不能存放primitive,而且把Object提取出來之後,還要做類型傳遞。

4.如果要做很多隨機訪問,那麼請用ArrayList,但是如果要再List的中間做很多插入和刪除的話,就應該用LinkedList了。

5.LinkedList能提供隊列,雙向隊列和棧的功能。

6.Map提供的不是對象與數組的關聯,而是對象和對象的關聯。

HashMap看重的是訪問速度,而TreeMap看重鍵的順序,因而它不如HashMap那麼快。而LinkedHashMap則保持對象插入的順序,但是也可以用LRU演算法為它重新排序。

7.Set只接受不重複的對象。HashSet提供了最快的查詢速度。而TreeSet則保持元素有序。LinkedHashSet保持元素的插入順序。

8.沒必要再在新代碼里使用舊類庫留下來的Vector,Hashtable和Stack了。

容器類庫是你每天都會用到的工具,它能使程序更簡潔,更強大並且更高效。

隨著Java的進一步完善,它的功能和易用性也得到提高,我有理由相信Java在計算機語言中所佔的位置也會更加牢固,讓喜愛Java的人更加喜愛它。祝願Java一路順風!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308470.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-03 14:49
下一篇 2025-01-03 14:49

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論