java基礎-集合

1、集合

????????在java中,集合(Collection)指的是一組數據容器,它可以存儲多個對象,并且允許用戶通過一些方法來訪問與操作這些對象。j

????????集合的實現原理都基于數據結構和算法,如下:

數據結構

  • 線性表: 數組,鏈表(單鏈表,雙鏈表),棧,隊列(普通隊列,雙端隊列)。
  • 散列表: 散列函數(哈希算法)。
  • 樹: 平衡二叉樹,二叉查找樹,平衡二叉查找樹(紅黑樹)。

算法

  • 排序算法: 冒泡排序,插入排序,選擇排序,歸并排序。
  • 搜索: 深度優先搜索,廣度優先搜索。
  • 查找: 線性表查找,樹結構查找,散列表查找。

?2、java集合

2.1、java集合框架圖(只做了解)

從上面的集合框架圖可以看到,Java 集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合,另一種是圖(Map),存儲鍵/值對映射。Collection 接口又有 3 種子類型,List、Set 和 Queue,再下面是一些抽象類,最后是具體實現類。

2.2、集合框架體系圖

Java 集合框架提供了一套性能優良,使用方便的接口和類,java集合框架位于java.util包中, 所以當使用集合框架的時候需要進行導包。

2.3、常用的集合框架

? ? ? ? 2.3.1、ArrayList? ? ? ?

? ? ? ? ArrayList實現了List的接口,實現了可變大小的數組,隨機訪問和遍歷元素時,提供更好的性能。該類也是非同步的,在多線程的情況下不要使用插入刪除效率低

? ? ? ? PS:數組的特點:查詢快,增刪慢

????????當創建ArrayList對象時,如果使用的是無參構造器,則初始elementData容量為0 ,第一次添加則擴容elementData為10,如需要再次擴容,則擴容elementData為1.5 倍

? ? ? ? ps:

????????JDK 1.7:直接創建一個初始容量為10的數組
????????JDK 1.8:一開始創建一個長度為0的數組,當添加第一個元素時再創建一個始容量為10的數組

????????如過一次性添加多個元素,1.5倍放不下,則新創建數組的長度以實際為準

? ? ? ? 三種構建方式

  • ArrayList():構造一個默認大小為10容量的空列表。
  • ArrayList(int initialCapacity):構造一個大小為指定int initialCapacity容量的空列表。
  • ArrayList(Collection c):構造一個和參數c相同元素的ArrayList對象

?常用api:

add()	將元素插入到指定位置的 arraylist 中
addAll()	添加集合中的所有元素到 arraylist 中
clear()	刪除 arraylist 中的所有元素
clone()	復制一份 arraylist
contains()	判斷元素是否在 arraylist
get()	通過索引值獲取 arraylist 中的元素
indexOf()	返回 arraylist 中元素的索引值
removeAll()	刪除存在于指定集合中的 arraylist 里的所有元素
remove()	刪除 arraylist 里的單個元素
size()	返回 arraylist 里元素數量
isEmpty()	判斷 arraylist 是否為空
subList()	截取部分 arraylist 的元素
set()	替換 arraylist 中指定索引的元素
sort()	對 arraylist 元素進行排序
toArray()	將 arraylist 轉換為數組
toString()	將 arraylist 轉換為字符串
ensureCapacity()	設置指定容量大小的 arraylist
lastIndexOf()	返回指定元素在 arraylist 中最后一次出現的位置
retainAll()	保留 arraylist 中在指定集合中也存在的那些元素
containsAll()	查看 arraylist 是否包含指定集合中的所有元素
trimToSize()	將 arraylist 中的容量調整為數組中的元素個數
removeRange()	刪除 arraylist 中指定索引之間存在的元素
replaceAll()	將給定的操作內容替換掉數組中每一個元素
removeIf()	刪除所有滿足特定條件的 arraylist 元素
forEach()	遍歷 arraylist 中每一個元素并執行特定操作

2.3.2、LinkedList

? ? ? ? LinkedList實現了List接口,允許有null(空)元素。LinkedList的底層是?雙向鏈表結構。由于鏈表沒有將元素存儲在連續的空間中,元素存儲在單獨的節點中,然后通過引用將節點連接起來了,因此在任意位置插入或者刪除元素時,不需要搬移元素,效率比較高

? ? ? ? 構建方式:

  • LinkedList():構造一個空的LinkedList對象。
  • LinkedList(Collection c):構造一個和參數c相同元素的LinkedList對象。

? ? ? ? ?PS:鏈表表不存在容量不足的問題,沒有擴容機制

??常用api:

public boolean add(E e)	鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。
public void add(int index, E element)	向指定位置插入元素。
public boolean addAll(Collection c)	將一個集合的所有元素添加到鏈表后面,返回是否成功,成功為 true,失敗為 false。
public boolean addAll(int index, Collection c)	將一個集合的所有元素添加到鏈表的指定位置后面,返回是否成功,成功為 true,失敗為 false。
public void addFirst(E e)	元素添加到頭部。
public void addLast(E e)	元素添加到尾部。
public boolean offer(E e)	向鏈表末尾添加元素,返回是否成功,成功為 true,失敗為 false。
public boolean offerFirst(E e)	頭部插入元素,返回是否成功,成功為 true,失敗為 false。
public boolean offerLast(E e)	尾部插入元素,返回是否成功,成功為 true,失敗為 false。
public void clear()	清空鏈表。
public E removeFirst()	刪除并返回第一個元素。
public E removeLast()	刪除并返回最后一個元素。
public boolean remove(Object o)	刪除某一元素,返回是否成功,成功為 true,失敗為 false。
public E remove(int index)	刪除指定位置的元素。
public E poll()	刪除并返回第一個元素。
public E remove()	刪除并返回第一個元素。
public boolean contains(Object o)	判斷是否含有某一元素。
public E get(int index)	返回指定位置的元素。
public E getFirst()	返回第一個元素。
public E getLast()	返回最后一個元素。
public int indexOf(Object o)	查找指定元素從前往后第一次出現的索引。
public int lastIndexOf(Object o)	查找指定元素最后一次出現的索引。
public E peek()	返回第一個元素。
public E element()	返回第一個元素。
public E peekFirst()	返回頭部元素。
public E peekLast()	返回尾部元素。
public E set(int index, E element)	設置指定位置的元素。
public Object clone()	克隆該列表。
public Iterator descendingIterator()	返回倒序迭代器。
public int size()	返回鏈表元素個數。
public ListIterator listIterator(int index)	返回從指定位置開始到末尾的迭代器。
public Object[] toArray()	返回一個由鏈表元素組成的數組。
public T[] toArray(T[] a)	返回一個由鏈表元素轉換類型而成的數組。

2.3.2、HashMap

  • HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射,默認長度是16,擴容因子0.75。
  • HashMap 實現了 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。
  • HashMap 是無序的,即不會記錄插入的順,線程不安全,key、value 都可以為 null,key是包裝類型。
  • HashMap 繼承于AbstractMap,實現了 Map、Cloneable、java.io.Serializable 接口。
  • jdk1.7采用頭插法,由數組 + 鏈表 組成,鏈表是為了解決哈希沖突。
    jdk1.8采用尾插法,由數組 + 鏈表+紅黑樹。(紅黑樹條件:鏈表長度大于8,且數組長度大于64)。

?常用api:

clear()	刪除 hashMap 中的所有鍵/值對
clone()	復制一份 hashMap
isEmpty()	判斷 hashMap 是否為空
size()	計算 hashMap 中鍵/值對的數量
put()	將鍵/值對添加到 hashMap 中
putAll()	將所有鍵/值對添加到 hashMap 中
putIfAbsent()	如果 hashMap 中不存在指定的鍵,則將指定的鍵/值對插入到 hashMap 中。
remove()	刪除 hashMap 中指定鍵 key 的映射關系
containsKey()	檢查 hashMap 中是否存在指定的 key 對應的映射關系。
containsValue()	檢查 hashMap 中是否存在指定的 value 對應的映射關系。
replace()	替換 hashMap 中是指定的 key 對應的 value。
replaceAll()	將 hashMap 中的所有映射關系替換成給定的函數所執行的結果。
get()	獲取指定 key 對應對 value
getOrDefault()	獲取指定 key 對應對 value,如果找不到 key ,則返回設置的默認值
forEach()	對 hashMap 中的每個映射執行指定的操作。
entrySet()	返回 hashMap 中所有映射項的集合集合視圖。
keySet()	返回 hashMap 中所有 key 組成的集合視圖。
values()	返回 hashMap 中存在的所有 value 值。
merge()	添加鍵值對到 hashMap 中
compute()	對 hashMap 中指定 key 的值進行重新計算
computeIfAbsent()	對 hashMap 中指定 key 的值進行重新計算,如果不存在這個 key,則添加到 hasMap 中
computeIfPresent()	對 hashMap 中指定 key 的值進行重新計算,前提是該 key 存在于 hashMap 中。

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

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

相關文章

振南技術干貨集:制冷設備大型IoT監測項目研發紀實(2)

注解目錄 1.制冷設備的監測迫在眉睫 1.1 冷食的利潤貢獻 1.2 冷設監測系統的困難 (制冷設備對于便利店為何如何重要?了解一下你所不知道的便利店和新零售行業。關于電力線載波通信的論戰。) 2、電路設計 2.1 防護電路 2.1.1 強電防護 …

基于JavaWeb+SSM+Vue教學輔助微信小程序系統的設計和實現

基于JavaWebSSMVue教學輔助微信小程序系統的設計和實現 源碼獲取入口前言主要技術系統設計功能截圖Lun文目錄訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 前言 1.1 概述 隨著信息時代的快速發展,互聯網的優勢和普及,人們生活…

[項目管理-33/創業之路-87/管理者與領導者-127]:如何提升自己項目管理的能力和水平

目錄 前言: 一、項目經理的角色定位 1.1 項目經理的職責 1.2 不同矩陣類型的項目,項目經理的職責 1.3 項目經理的角色定位 1.4 項目經理的發展路徑 二、項目經理項目理論和知識結構 三、軟件項目經理在計算機水平的提升 四、項目經理業務知識的…

nodejs微信小程序+python+PHP-儲能電站運營管理系統的設計與實現-計算機畢業設計推薦

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性:…

七、通過libfdk_aac編解碼器實現aac音頻和pcm的編解碼

前言 測試環境: ffmpeg的4.3.2自行編譯版本windows環境qt5.12 AAC編碼是MP3格式的后繼產品,通常在相同的比特率下可以獲得比MP3更高的聲音質量,是iPhone、iPod、iPad、iTunes的標準音頻格式。 AAC相較于MP3的改進包含: 更多的采…

【leetcode】209. 長度最小的子數組

209. 長度最小的子數組 - 力扣(LeetCode) 給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其長度。如果不存在符合條…

系列八、key是弱引用,gc垃圾回收時會影響ThreadLocal正常工作嗎

一、key是弱引用,gc垃圾回收時會影響ThreadLocal正常工作嗎 到這里,有些小伙伴可能有疑問,ThreadLocalMap的key既然是 弱引用,那么GC時會不會貿然地把key回收掉,進而影響ThreadLocal的正常使用呢?答案是不會…

HTML新手入門筆記整理:HTML基本標簽

結構標簽 <html> </html> 告訴瀏覽器這個頁面是從<html> 開始&#xff0c;到 </html>結束 <head> </head> 網頁的頭部&#xff0c;用于定義一些特殊內容&#xff0c;如頁面標題、定時刷新、外部文件等。 <body> </body> …

基于SSM的旅游管理系統設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技術開發 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#x…

大文件導出

關于大文件導出的優化迭代情況如下&#xff1a; 計算機配置&#xff1a;四核16G內存 初始版本為單線程單文件導出文件&#xff0c;mybatis讀 opencsv寫&#xff0c;耗時將近三小時&#xff1b; 第一輪優化改為多線程單文件&#xff0c;提高讀數據效率&#xff0c;時間僅縮減十分…

數據分析基礎之《matplotlib(1)—介紹》

一、什么是matplotlib 1、專門用于開發2D圖表&#xff08;包括3D圖表&#xff09; 2、使用起來及其簡單 3、以漸進、交互方式實現數據可視化 4、matplotlib mat&#xff1a;matrix&#xff08;矩陣&#xff09; plot&#xff1a;畫圖 lib&#xff1a;庫 二、為什么要學習m…

記錄一次因內存不足而導致hiveserver2和namenode進程宕機的排查

背景 最近發現集群主節點總有進程宕機&#xff0c;定位了大半天才找到原因&#xff0c;分享一下 排查過程 查詢hiveserver2和namenode日志&#xff0c;都是正常的&#xff0c;突然日志就不記錄了&#xff0c;直到我重啟之后又恢復工作了。 排查各種日志都是正常的&#xff0…

vue3 + vue-router + keep-alive緩存頁面

1.vue-router中增加mate.keepAlive和deepth屬性 {path: /,name: home,component: HomeView,meta: {// 當前頁面要不要緩存keepAlive: false,// 當前頁面層級deepth: 1,}},{path: /list,name: list,component: ListView,meta: {// 當前頁面要不要緩存keepAlive: true,// 當前頁…

代碼規范之-理解ESLint、Prettier、EditorConfig

前言 團隊多人協同開發項目&#xff0c;困擾團隊管理的一個很大的問題就是&#xff1a;無可避免地會出現每個開發者編碼習慣不同、代碼風格迥異&#xff0c;為了代碼高可用、可維護性&#xff0c;需要從項目管理上盡量統一和規范代碼。理想的方式需要在項目工程化方面&#xff…

Kafka官方生產者和消費者腳本簡單使用

問題 怎樣使用Kafka官方生產者和消費者腳本進行消費生產和消費?這里假設已經下載了kafka官方文件,并已經解壓. 生產者配置文件 producer_hr.properties bootstrap.servers10.xx.xx.xxx:9092,10.xx.xx.xxx:9092,10.xx.xx.xxx:9092 compression.typenone security.protocolS…

部署jekins遇到的問題

jdk問題 我用的jdk版本是21的結果版本太新了&#xff0c;啟動jekins服務的時候總是報錯最后在jekins的安裝目錄下面的jekinsErr.log查看日志發現是jdk問題最后換了一個17版本的就解決了。 unity和jekins jekins和Git源碼管理 jekins和Git聯動使用 我想讓jekins每次打包的時…

【css/vue】使用css變量,在同一個頁面根據不同情況改變字號等樣式

解決方法是&#xff1a;將 css 的屬性使用 v-bind 與 Vue 組件的屬性綁定&#xff0c;當組件的屬性變化時&#xff0c;css 對應的屬性值也就會隨之變化&#xff1b; 具體實現代碼&#xff1a; <template><div><span class"navTitle">標題名</s…

3D電路板在線渲染案例

從概念上講,這是有道理的,因為PCB印制電路板上的走線從一個連接到下一個連接的路線基本上是平面的。 然而,我們生活在一個 3 維世界中,能夠以這種方式可視化電路以及相應的組件,對于設計過程很有幫助。本文將介紹KiCad中基本的3D查看功能,以及如何使用NSDT 3DConvert在線…

Day38力扣打卡

打卡記錄 網格中的最小路徑代價&#xff08;動態規劃&#xff09; 鏈接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…

【洛谷 B2010】帶余除法 題解(順序結構+四則運算)

帶余除法 題目描述 給定被除數和除數&#xff0c;求整數商及余數。此題中請使用默認的整除和取余運算&#xff0c;無需對結果進行任何特殊處理。 輸入格式 一行&#xff0c;包含兩個整數&#xff0c;依次為被除數和除數&#xff08;除數非零&#xff09;&#xff0c;中間用…