集合框框框地架

這一次來介紹一下常用的集合:

首先是兩種集合的《家庭系譜圖》:

image-20240524223628645

在這里插入圖片描述

接下來介紹一下集合的種類:

Collection

Set

  1. SetTreeSet:基于紅?樹實現,?持有序性操作,例如:根據?個范圍查找元素的操作。但是查找效率不如HashSet,HashSet 查找的時間復雜度為 O(1),TreeSet 則為 O(logN)。

  2. HashSet:基于哈希表實現,?持快速查找,但不?持有序性操作。并且失去了元素的插?順序信息,也就是說使? Iterator 遍歷 HashSet 得到的結果是不確定的。

  3. LinkedHashSet:具有 HashSet 的查找效率,且內部使?雙向鏈表維護元素的插?順序。

List

  1. ArrayList:基于動態數組實現,?持隨機訪問。

  2. Vector:和 ArrayList 類似,但它是線程安全的。

  3. LinkedList:基于雙向鏈表實現,只能順序訪問,但是可以快速地在鏈表中間插?和刪除元素。不僅如此,LinkedList 還可以?作棧、隊列和雙向隊列。

Queue

  1. LinkedList:可以?它來實現雙向隊列。

  2. PriorityQueue:基于堆結構實現,可以?它來實現優先隊列。

Map

  1. TreeMap:基于紅?樹實現。

  2. HashMap:基于哈希表實現。

  3. HashTable:和 HashMap 類似,但它是線程安全的,這意味著同?時刻多個線程可以同時寫入并且不會導致數據不?致。它是遺留類,不應該去使?它。現在可以使? ConcurrentHashMap 來?持線程安全,并且 ConcurrentHashMap 的效率會更?,因為 ConcurrentHashMap 引?了分段鎖。

  4. LinkedHashMap:使?雙向鏈表來維護元素的順序,順序為插?順序或者最近最少使?(LRU)順序。

三種常用的集合有什么區別呢?

  1. List

    有序集合:List中的元素有序,即元素按照添加的順序排列。 允許重復:List可以包含重復的元素。
    實現類:常見的實現類有ArrayList、LinkedList和Vector等。 常用操作:支持通過索引來訪問元素,例如get(int index)。 用途:適用于需要元素有序或需要經常通過索引訪問元素的場景。

  2. Set

    無序集合:Set中的元素無序,元素的順序可能會在每次插入或刪除操作后發生變化。
    不允許重復:Set不允許包含重復的元素,每個元素都是唯一的。
    實現類:常見的實現類有HashSet、TreeSet和LinkedHashSet等。
    常用操作:主要提供添加、刪除和檢查元素是否存在的操作。 用途:適用于需要確保元素唯一性的場景,例如去重、集合操作等。

  3. Map

    鍵值對集合:Map存儲鍵值對(key-value pairs),每個鍵映射到一個值。 鍵的唯一性:Map中的鍵是唯一的,但值可以重復。
    實現類:常見的實現類有HashMap、TreeMap和LinkedHashMap等。
    常用操作:通過鍵來訪問、添加或刪除對應的值,例如get(Object key)、put(K key, V value)。
    用途:適用于需要根據鍵來快速查找、更新或刪除值的場景,例如數據庫索引、緩存等。

總結:List適用于需要元素有序或索引訪問的場景;Set適用于需要元素唯一且無序的場景;Map適用于需要通過鍵來存儲和訪問值的場景。

下來是常用的集合中ArrayList 和LinkedList的一些辨別

ArrayList 和LinkedList的區別?

ArrayList:底層是基于數組實現的,查找快,增刪較慢;

LinkedList:底層是基于鏈表實現的。確切的說是循環雙向鏈表(JDK1.6 之前是雙向循環鏈表、JDK1.7 之后取消了循環),查找慢、增刪快。LinkedList 鏈表由?系列表項連接?成,?個表項包含 3 個部分:元素內容、前驅表和后驅表。鏈表內部有?個 header 表項,既是鏈表的開始也是鏈表的結尾。header 的后繼表項是鏈表中的第?個元素,header 的前驅表項是鏈表中的最后?個元素。

ArrayList 的增刪未必就是? LinkedList 要慢:

  1. 如果增刪都是在末尾來操作【每次調?的都是 remove() 和 add()】,此時 ArrayList 就不需要移動和復制數組來進?操作了。如果數據量有百萬級的時,速度是會? LinkedList 要快的。

就不需要移動和復制數組來進?操作了。如果數據量有百萬級的時,速度是會? LinkedList 要快的。

  1. 如果刪除操作的位置是在中間。由于 LinkedList 的消耗主要是在遍歷上,ArrayList 的消耗主要是在移動和復制上(底層調?的是 arrayCopy() ?法,是 native ?法)。LinkedList 的遍歷速度是要慢于
    ArrayList 的復制移動速度的如果數據量有百萬級的時,還是 ArrayList 要快。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14576.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用純原生的ADO.NET技術進行數據讀取

目錄 1. 引用命名空間 2. 創建連接字符串 3. 打開數據庫連接 4. 執行SQL查詢 5. 讀取結果集 6. 處理異常和關閉連接 1. 引用命名空間 在代碼文件中引用幾個關鍵的System.Data.SqlClient命名空間,這些命名空間包含了用于數據庫操作的類。 using System.Data.Sq…

Unity實現TableView

基于Scrollview封裝的TableView,實現對視野外的Cell回收利用,減少創建Cell的開銷。 核心邏輯如下: /***************************************動態使用cell核心邏輯開始 **************************************///計算所有cell的坐標信息 …

利用java8 的 CompletableFuture 優化 Flink 程序,性能提升 50%

你好,我是 shengjk1,多年大廠經驗,努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注!你會有如下收益: 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么,評論或者私信告訴我! 文章目錄 一…

flume sink 簡介及官方用例

1、HDFS Sink 此sink將事件寫入 Hadoop 分布式文件系統 (HDFS) 中。它目前支持創建文本和序列文件。它支持兩種文件類型的壓縮。可以根據經過的時間或數據大小或事件數定期滾動文件(關閉當前文件并創建一個新文件)。它還按事件起…

AI圖書推薦:用100個ChatGPT提示詞掌握Python編程

《用100個ChatGPT提示詞掌握Python編程》(ChatGPT:Your Python Coach Mastering the Essentials in 100 Prompts) 塞爾吉奧羅哈斯-加萊亞諾(Sergio Rojas-Galeano)是一位熱情的計算機科學家,對人工智能、機器學習、進化…

C++中獲取int最大與最小值(補)

上文中,我們學習了C中獲取int最大與最小值的兩種方法:C庫和移位運算,這篇文章將解決在移位運算中遇到的各種報錯,并提出一種新的生成int最值的方法 上文鏈接:http://t.csdnimg.cn/cn7Ad 移位運算取最值常見報錯 Dev…

匯編語言(STC89C52)

指令是計算機計算CPU根據人的意圖來執行某種操作的命令。一臺計算機所執行的全部指令的集合,稱為這個CPU的指令系統。而想要使計算機按照人們的要求完成一項工作,就必須讓CPU按順序執行預設的操作,即逐條執行人們編寫的指令。這種按照人民要求…

C++ 寫的_string類,兼容std::string, MFC CString和 C# 的string

代碼例子: using namespace lf; int main() { CString s1 _t("http://www.csdn.net"); _string s2 s1; CString s3 s2; _pcn(s1); _pcn(s2); _pcn(s3); return 0; } 輸出: _Str.h /***************************************…

網創教程:WordPress插件網創自動采集并發布

網創教程:WordPress插件網創自動采集并發布 使用插件注意事項: 如果遇到404錯誤,請先檢查并調整網站的偽靜態設置,這是最常見的問題。需要定制化服務,請隨時聯系我。 本次更新內容 我們進行了多項更新和優化&#x…

深入解析kube-scheduler的算法自定義插件

目錄 ?編輯 一、問題引入 二、自定義步驟 三、最佳實踐考慮 一、問題引入 當涉及到 Kubernetes 集群的調度和資源分配時,kube-scheduler 是一個關鍵組件。kube-scheduler 負責根據集群的調度策略,將 Pod 分配到適當的節點上。kube-scheduler 默認使…

python爬蟲學習代碼1

百度翻譯:利用爬蟲技術模擬人工查詢英文單詞,將查到的信息保存到本地 import requests import json # 1.指定url post_url https://fanyi.baidu.com/sug # 2.UA標識 headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl…

pyqt6入門案例

效果預覽 hello.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"geometry"><…

android studio接入facebook踩坑1

今天在接入facebook第三方登錄的時候&#xff0c;點擊登錄按鈕&#xff0c;APP閃退&#xff0c;并報錯 java.lang.RuntimeException Failure delivering result ResultInfo{whonull,request64206,result-1} 新文章鏈接https://lengmo714.top/facebook1.html 如下圖&#xff1a;…

OpenGL學習入門及開發環境搭建

最近學習OpenGL開發&#xff0c;被各種openGL庫搞得暈頭轉向&#xff0c;什么glut, glew glfw glad等等。 可以參考這邊博客:OpenGL 下面的 glut freeglut glfw 都是個啥_glx wgl的中文-CSDN博客 glfw是glut的升級版&#xff0c;跨平臺的主要處理窗口 事件相關。 glad是glew…

React項目知識積累(四)

1.useMemo( ) 在 React 中&#xff0c;useMemo 是一個 Hook&#xff0c;用于記憶計算結果&#xff0c;只有當依賴項之一發生變化時&#xff0c;才會重新計算。這有助于避免不必要的計算和渲染&#xff0c;從而提高應用程序的性能。 基本語法如下&#xff1a; const memoized…

html多節點生成圖片并導出zip包

html多節點生成圖片并導出zip包 背景 在做項目時遇到一個要將html節點展示的圖片列表統一導出為zip包的需求。 難點 將html節點生成圖片將多張圖片加入zip包中&#xff0c;然后下載 解決html生成圖片問題 參考html截圖的思路使用 pnpm add html-to-image如何將圖片資源生成z…

鴻蒙OS開發:【一次開發,多端部署】(多設備自適應能力)簡單介紹

多設備自適應能力 介紹 本示例是《一次開發&#xff0c;多端部署》的配套示例代碼&#xff0c;展示了[頁面開發的一多能力]&#xff0c;包括自適應布局、響應式布局、典型布局場景以及資源文件使用。 名稱簡介 開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhe…

數據可視化技術頭歌測試合集

努力是為了不平庸~ 學習的最大理由是想擺脫平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;遲一天就多一天平庸的困擾 目錄 時間趨勢可視化-柱形圖 第1關&#xff1a;“大胃王”比賽數據柱形圖繪制——繪制柱形圖的基本步驟 任務描述 相關知識 觀察和處理數據 繪…

Linux中gcc/g++的基本使用

目錄 gcc/g的使用gcc/g是如何生成可執行文件的預處理編譯匯編鏈接 庫.o文件是如何與庫鏈接的&#xff1f; debug版本和release版本 gcc/g的使用 在windows中&#xff0c;我們在VS中編寫好了代碼之后就可以直接在VS中對源碼進行編譯等操作后運行 而在Linux下&#xff0c;我們可…

LeetCode 279 —— 完全平方數

閱讀目錄 1. 題目2. 解題思路3. 代碼實現 1. 題目 2. 解題思路 此圖利用動態規劃進行求解&#xff0c;首先&#xff0c;我們求出小于 n n n 的所有完全平方數&#xff0c;存放在數組 squareNums 中。 定義 dp[n] 為和為 n n n 的完全平方數的最小數量&#xff0c;那么有狀態…