JAVA 集合(單列集合)

集合框架

1.集合的特點
a.只能存儲引用數據類型的數據
b.長度可變
c.集合中有大量的方法,方便我們操作

2.分類:
a.單列集合:一個元素就一個組成部分:
list.add(“張三”)
b.雙列集合:一個元素有兩部分構成: key 和 value
map.put(“濤哥”,“金蓮”) -> key,value叫做鍵值對
在這里插入圖片描述

Collection接口

單列集合的頂級接口

使用

Collection <泛型> 對象名 = new 實現類集合對象<泛型>();

泛型,決定集合中的元素都是啥類型的,必須指定的是引用數據類型

方法

boolean add(E e) : 將給定的元素添加到當前集合中(我們一般調add時,不用boolean接收,因為add一定會成功)
boolean addAll(Collection<? extends E> c) :將另一個集合元素添加到當前集合中 (集合合并)
void clear():清除集合中所有的元素
boolean remove(Object o):將指定的元素從集合中刪除
boolean contains(Object o) :判斷當前集合中是否包含指定的元素
boolean isEmpty() : 判斷當前集合中是否有元素->判斷集合是否為空
int size() :返回集合中的元素個數。
Object[] toArray(): 把集合中的元素,存儲到數組中

public class Demo01Collection {public static void main(String[] args) {Collection<String> collection = new ArrayList<>();//boolean add(E e) : 將給定的元素添加到當前集合中(我們一般調add時,不用boolean接收,因為add一定會成功)collection.add("蕭炎");collection.add("蕭薰兒");collection.add("彩鱗");collection.add("小醫仙");collection.add("云韻");collection.add("濤哥");System.out.println(collection);//boolean addAll(Collection<? extends E> c) :將另一個集合元素添加到當前集合中 (集合合并)Collection<String> collection1 = new ArrayList<>();collection1.add("張無忌");collection1.add("小昭");collection1.add("趙敏");collection1.add("周芷若");collection1.addAll(collection);System.out.println(collection1);//void clear():清除集合中所有的元素collection1.clear();System.out.println(collection1);//boolean contains(Object o)  :判斷當前集合中是否包含指定的元素boolean result01 = collection.contains("濤哥");System.out.println("result01 = " + result01);//boolean isEmpty() : 判斷當前集合中是否有元素->判斷集合是否為空System.out.println(collection1.isEmpty());//boolean remove(Object o):將指定的元素從集合中刪除collection.remove("濤哥");System.out.println(collection);//int size() :返回集合中的元素個數。System.out.println(collection.size());//Object[] toArray(): 把集合中的元素,存儲到數組中Object[] arr = collection.toArray();System.out.println(Arrays.toString(arr));}
}

迭代器?????

1.概述:Iterator接口
2.獲取:Collection中的方法 Itreator<E> itreator()
3.方法:

boolean hasNext()  -> 判斷集合中有沒有下一個元素E next()  ->獲取下一個元素

4.注意-并發修改異常

public class Demo03Iterator {public static void main(String[] args) {//需求:定義一個集合,存儲 唐僧,孫悟空,豬八戒,沙僧,遍歷集合,如果遍歷到豬八戒,往集合中添加一個白龍馬ArrayList<String> list = new ArrayList<>();list.add("唐僧");list.add("孫悟空");list.add("豬八戒");list.add("沙僧");Iterator<String> iterator = list.iterator();while(iterator.hasNext()){String element = iterator.next();if ("豬八戒".equals(element)){list.add("白龍馬");}}System.out.println(list);}
}

我們調用add方法,而add方法是底層只給modCount++,但是再次調用next方法的時候,并沒有修改后的modCount重新賦值給expectedModCount,導致next方法底層的判斷出先實際操作與預期操作次數不等的情況,所以拋出了”并發修改異常“。

5.迭代器底層原理
獲取Iterator的時候怎么獲取的:Iterator iterator = list.iterator()
我們知道Iterator是一個接口,等號右邊一定是它的實現類對象
問題:Iterator接收的到底是哪個實現類對象呢? -> ArrayList中的內部類Itr對象

注意:只有ArrayList使用迭代器的時候Iterator接口才會指向Itr,其他的集合使用迭代器Iterator就指向的不是Itr了

List接口?????

ArrayList

1.特點:
a.元素有序,按照什么順序存儲,就按照什么順序取。
b.元素可重復
c.有索引,可以利用索引取操作元素
d.線程不安全

2.數據結構:數組
3.方法:
boolean add(E e) -> 將元素添加到集合中->尾部(add方法一定能添加成功的,所以我們不用boolean接收返回值)
void add(int index, E element) ->在指定索引位置上添加元素
boolean remove(Object o) ->刪除指定的元素,刪除成功為true,失敗為false
E remove(int index) -> 刪除指定索引位置上的元素,返回的是被刪除的那個元素
E set(int index, E element) -> 將指定索引位置上的元素,修改成后面的element元素
E get(int index) -> 根據索引獲取元素
int size() -> 獲取集合元素個數

4.原理:
a.不是一new底層就會創建初始容量為10的空列表,而是第一次add的時候才會創建初始化容量為10的空列表
b.ArrayList底層是數組,那么為啥還說集合長度可變呢?
ArrayList底層會自動擴容-> Arrays.copyOf
c.擴容多少倍?
1.5倍

LinkedList

1.特點:
a.元素有序,按照什么順序存儲,就按照什么順序取。
b.元素可重復
c.有索引,本質無索引,但是java中創建了很多根據索引操作元素的方法
d.線程不安全

2.數據結構:雙向鏈表

3.方法

  • public void addFirst(E e):將指定元素插入此列表的開頭。
  • public void addLast(E e):將指定元素添加到此列表的結尾。
  • public E getFirst():返回此列表的第一個元素。
  • public E getLast():返回此列表的最后一個元素。
  • public E removeFirst():移除并返回此列表的第一個元素。
  • public E removeLast():移除并返回此列表的最后一個元素。
  • public E pop():從此列表所表示的堆棧處彈出一個元素。類似于public removeFirst()
  • public void push(E e):將元素推入此列表所表示的堆棧。
  • public boolean isEmpty():如果列表沒有元素,則返回true。

增強for?????

1.作用:遍歷集合或者數組
2.格式

for(元素類型 變量名:要遍歷的集合名或者數組名){變量名代表每一個元素;
} 
//快捷寫法 要遍歷的集合或數組名.for

3.實現原理
遍歷集合時底層為迭代器
遍歷數組時底層為普通for循環

學習資料來源尚硅谷

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

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

相關文章

Docker各版本的新特性

Docker 作為流行的容器化平臺&#xff0c;會定期發布新版本以引入新特性、改進和修復。根據提供的搜索結果&#xff0c;以下是一些 Docker 版本及其新特性的概覽&#xff1a; Docker Desktop v4.12 Containerd 的集成&#xff1a;更深入集成 containerd 以管理容器生命周期&a…

鎖和MVCC如何實現mysql的隔離級別

概述 MVCC解決讀的隔離性&#xff0c;加鎖解決寫的隔離性。 讀未提交 讀未提交&#xff0c;更新數據大概率使用的是獨享鎖吧。 讀已提交 在 Read Committed&#xff08;讀已提交&#xff09;隔離級別下&#xff0c;每次執行讀操作時都會生成一個新的 read view。這是因為在讀…

英譯漢早操練-(二十)

hello大家好&#xff0c;這篇跟隨十九&#xff0c;繼續真題學習。如果想看全部請返回到第十九篇。 英譯漢早操練-&#xff08;十九&#xff09;-CSDN博客 The political upheaval in Libya and elsewhere in North Africa has opened the way for thousands of new migrants to…

【C++學習第15天】STL

一、種類 vector&#xff1a;變長數組&#xff0c;倍增的思想。給數組申請空間所耗費的時間取決于申請次數&#xff0c;而不是申請空間的大小&#xff0c;即a[1]和a[10000]兩個數組的申請時間是基本一致的。pair<int, string>&#xff1a;存儲一個二元組&#xff0c;前后…

AI 圖像生成-環境配置

一、python環境安裝 Windows安裝Python&#xff08;圖解&#xff09; 二、CUDA安裝 CUDA安裝教程&#xff08;超詳細&#xff09;-CSDN博客 三、Git安裝 git安裝教程&#xff08;詳細版本&#xff09;-CSDN博客 四、啟動器安裝 這里安裝的是秋葉aaaki的安裝包 【AI繪畫…

【GlobalMapper精品教程】081:WGS84/CGCS2000轉Lambert投影

參考閱讀:ArcGIS實驗教程——實驗十:矢量數據投影變換 文章目錄 一、加載實驗數據二、設置輸出坐標系三、數據導出一、加載實驗數據 打開配套案例數據包中的data081.rar中的矢量數據,如下所示: 查看源坐標系:雙擊圖層的,圖層投影選項卡,數據的已有坐標系為WGS84地理坐標…

MySQL創建存儲過程函數

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 學號,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

[初學rust] 05_ rust struct

rust struct 其實這也算復合類型&#xff0c;但是其他語言都有&#xff0c;所以抽取出來單獨看的時候會很簡單&#xff0c;更容易學 1. 定義結構體 結構體的定義和其他語言沒啥區別。 struct User {name: String,age: i32, }2. 創建實例 創建實例的過程就跟js類似 let us…

【3dmax筆記】021:對齊工具(快速對齊、法線對齊、對齊攝影機)

文章目錄 一、對齊二、快速對齊三、法線對齊四、對齊攝影機五、注意事項3dmax提供了對齊、快速對齊、法線對齊和對齊攝像機等對齊工具: 對齊工具選項: 下面進行一一講解。 一、對齊 快捷鍵為Alt+A,將當前選擇對象與目標對象進行對齊。 最大對最大:

【小筆記】neo4j用load csv指令導入數據

【小筆記】neo4j用load csv指令導入數據 背景 很久沒有用load CSV的方式導入過數據了因為它每次導入有數量限制&#xff08;印象中是1K還是1W&#xff09;&#xff0c;在企業中構建的圖譜往往都是大規模的&#xff0c;此時通常采用的是Neo4j-admin import方式。最近遇到了一些…

振弦式表面應變計怎么安裝

振弦式表面應變計是一種用于測量結構表面應變的高精度傳感器&#xff0c;廣泛應用于工程和科研領域。正確安裝振弦式表面應變計對于確保測量結果的準確性至關重要。以下是安裝振弦式表面應變計的步驟和注意事項&#xff1a; 1. 準備工作 在開始安裝前&#xff0c;需要準備以下工…

whisper之初步使用記錄

文章目錄 前言 一、whisper是什么&#xff1f; 二、使用步驟 1.安裝 2.python調用 3.識別效果評估 4.一點封裝 5.參考鏈接 總結 前言 隨著AI大模型的不斷發展&#xff0c;語音識別等周邊內容也再次引發關注&#xff0c;通過語音轉文字再與大模型交互&#xff0c;從而…

【Gitlab遠程訪問本地倉庫】Gitlab如何安裝配置并結合內網穿透實現遠程訪問本地倉庫進行管理

文章目錄 前言1. 下載Gitlab2. 安裝Gitlab3. 啟動Gitlab4. 安裝cpolar5. 創建隧道配置訪問地址6. 固定GitLab訪問地址6.1 保留二級子域名6.2 配置二級子域名 7. 測試訪問二級子域名 前言 GitLab 是一個用于倉庫管理系統的開源項目&#xff0c;使用Git作為代碼管理工具&#xf…

為什么質量工程師必學六西格瑪?突破職業發展的瓶頸?

在質量管理領域工作多年&#xff0c;你是否曾感受到事業發展的停滯不前&#xff1f;3年、5年的職業生涯&#xff0c;薪水依舊停留在每月5000-7000&#xff0c;而同行業的其他人卻能月入2-3萬&#xff0c;這種差距讓人不禁陷入深思。 問題究竟出在哪里&#xff1f;為什么我們的…

編譯OpenResty遇到找不到OpenSSL的解決辦法

以OpenResty-1.19.9.1為例 編輯openresty-1.19.9.1/build/nginx-1.19.9/auto/lib/openssl/conf CORE_INCS"$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS"$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS"$CORE_LIBS $OPENSSL/.…

揭秘圖形編程 動靜接口如何助力 AGV 集成

在公司軟件開發團隊的辦公室里&#xff0c;陽光透過窗戶灑在排列整齊的辦公桌上。臥龍坐在辦公桌前&#xff0c;面前攤開一份內測報告&#xff0c;他的手指時不時地敲擊著桌面&#xff0c;流露出內心的煩躁。他抬起頭&#xff0c;眼神中透露出一絲困惑&#xff0c;看向正在文件…

調用函數實現數組的輸入排序插入與輸出

輸入一串數字&#xff0c;輸出排序插入后輸出最后的數字序列&#xff1b; 把主要步驟交給主函數&#xff0c;通過調用函數來實現整體的功能&#xff1a; 寫出主函數&#xff08;這里使用冒泡排序&#xff09;&#xff1a; int main(){int n;int a[10];cin>>n;inputa(a…

【網絡安全】【Frida實踐案例】某圖xx付費功能逆向分析(一)

文章目錄 一、目標應用二、環境三、步驟1、查看布局id2、用到的Log日志類信息3、嘗試hook VIP判斷方法 四、總結五、相關源碼 1、文章僅供學習參考&#xff0c;嚴禁非法使用&#xff01;如非法使用&#xff0c;而導致的一切后果&#xff0c;由使用者自負&#xff01; 2、禁止將…

【C++】string類常用函數用法總結

目錄 常用函數一覽 默認成員函數 與容量有關的函數 part 1 part 2 part 3 與訪問和遍歷有關的函數 與修改有關的函數 npos 與string相關的其它常用函數 常用非成員函數 getline和cin的區別 常用函數一覽 //默認成員函數 string();string(const char* s);string(si…

貓狗分類識別②圖像歸一化-位置和重心歸一化處理

一、導入庫 glob 和 os 都是Python的標準庫模塊&#xff0c;也就是說它們隨Python一起安裝&#xff0c;無需額外安裝即可使用。 glob 模塊提供了一個在目錄中使用通配符搜索創建文件列表的函數&#xff0c;例如&#xff0c;可以使用 glob.glob(*.txt) 來查找當前目錄下所有的…