Java進階3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他們的迭代器

Java集合框架

  • 集合框架被設計成的目標:

高性能、高效
允許不同類型的結合,以類似的方式進行工作,有高度的互操作性
對一個集合的擴展和適應必須是簡單的

請添加圖片描述

兩種容器:集合Collection、圖Map

集合接口被分為了三種子類型:List、Set、Queue

具體的實現類:ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkHashMap


集合接口

集合框架定義了一些接口,每個接口都提供了不同的功能。
詳情可見:https://www.runoob.com/java/java-collections.html

Set和List區別

Set是一個集合,無序而且不允許被重復
Set檢索效率低下
List和數組相似,但是它可以被動態地增長,會自動增加List的長度

Java ArrayList

  • ArrayList是一個可以被動態修改的數組,它和普通數組的區別就是沒有固定的長度,可以隨時被更改(增加或者刪除)
  • ArrayList繼承了AbstractList,并且實現了List接口
  • ArrayList位于java.util包中,使用之前必須導入它
import java.util.ArrayList;
ArrayList<E> objectName = new ArrayList<>()
  • E是泛型數據類型,用于設置objectName的數據類型,只能作為引用數據類型
  • objectName 對象名字

添加元素
public static void main(String[] args){ArrayList<String> sites = new ArrayList<String>();sites.add("Google");sites.add("Bing");sites.add("Youtube");sites.add("Bilibili");System.out.println(sites);}

訪問元素
  • 使用get()方法來訪問元素
System.out.println(sites.get(1));
//訪問第一個
修改元素
  • 使用set方法來修改ArrayList中的元素
sites.set(2,"Wiki");
//第一個參數是索引的位置,第二個位置是修改之后的值
刪除元素
  • 使用remove方法可以用于刪除元素
sites.remove(3);
//刪除3號元素
輸出元素數量
  • 使用size()來輸出ArrayList()中的元素個數
sites.size();
迭代數組列表
  • 使用for來迭代數組中列表中的元素
for(int i=0;i<sites.size();i++){System.out.println(sites.get(1));
}
  • 當然Java中還封裝了for–each循環,我們也可通過for-each來迭代元素
for(String i:sites){System.out.println(i);
}
其他的引用類型

ArrayList中的元素實際上是對象,在上述的實例中,數組列表元素都是字符串String類型。
如果我們需要存儲其他的類型,而只能為引用數據類型,這個時候我們就需要使用到基本類型的包裝類,即Java的裝箱

ArrayList排序

Collections類也是一個非常有用的類,位于java.utils包中,提供sort()方法對字符或者數字列表進行排序,以下的實例對字母進行排序。


import java.util.ArrayList;import java.util.Collections;  
// 引入 Collections 類
public class RunoobTest {public static void main(String[] args) {ArrayList<Integer> myNumbers = new ArrayList<Integer>();        myNumbers.add(33);myNumbers.add(15);myNumbers.add(20);myNumbers.add(34);        myNumbers.add(8);        myNumbers.add(12);        Collections.sort(myNumbers);  // 數字排序        for (int i : myNumbers) {System.out.println(i);     }   }
}

LinkedList

鏈表LinkedList是一種常見的基礎類型數據結構,是一種線性表,但是不會按照線性的順序來存儲數據,而是每個節點里面存儲了下一個結點的地址

  • 與ArrayList相比較,LinkedList的增加和刪除操作的效率更高,但是查找和修改的效率更低。

建議使用ArrayList的情況

  • 頻繁地訪問列表中的某一個元素
  • 只需要在列表末尾進行添加和刪除的元素的操作

建議使用LinkedList的情況

  • 需要通過循環迭代來訪問列表中的某些元素
  • 需要頻繁地在列表開頭、中間、末尾等地方進行增加和刪除元素的操作

LinkedList 類位于 java.util 包中,使用前需要引入它,語法格式如下:

// 引入 LinkedList 類
import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>();   
// 普通創建方法或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c);
// 使用集合創建鏈表
  • 以下是存放LinkList的一個實例,這個實例中使用了LinkedList來存放了String類型的變量
import java.util.LinkedList;public class Init {//main函數,程序入口public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("google");sites.add("baidu");sites.add("yahoo");System.out.println(sites);for(String i:sites){System.out.println(i);}}
}
  • 在LinkedList中添加了很多的方法,給我們提供了很多方便的地方,例如getFirst()取第一個,getLast()取最后一個等,詳見:
    https://www.runoob.com/java/java-linkedlist.html

Java HashSet

  • Java HashSet是基于HashMap來實現的,是一個不允許有重復元素的集合。
  • 允許具有null值。
  • 無序,不會記錄順序。
  • 不是線程安全的,多個線程嘗試修改了它,那么結果也會具有不確定性。
  • 它實現了Set接口。
  • 他的基本元素實際上是對象,那么一些基本的類型可以使用它的包裝類。
  • 導入包:java.util.HashSet
添加元素
  • 使用add()方法來添加元素
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset);}
}
判斷元素是否存在
  • 使用contains()方法來判斷元素是否存在
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.contains(3));}
}
刪除元素
  • 使用remove()方法來刪除某個元素
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.contains(3));newhashset.remove(3);System.out.println(newhashset.contains(3));}
}
清空
  • 使用clear方法清空所有的元素,變成空的集合
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset);newhashset.clear();System.out.println(newhashset);}
}
計算大小
  • 使用size()方法來計算大小
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.size());}
}
迭代HashSet
  • 通過foreach循環來迭代HashSet中的元素
import java.util.HashSet;public class Init {//main函數,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);for(Integer item:newhashset){System.out.println(item);}}
}

HashMap

  • HashMap是一個散列表,用于存儲鍵值對的映射
  • HashMap實現了Map接口,根據鍵的HashCode值存儲數據,具有很快的訪問速度,最多允許的一條記錄的鍵為null,不支持線程同步
  • HashMap是無序的
  • HashMap 繼承于AbstractMap,實現了 Map、Cloneable、java.io.Serializable 接口。
初始化一個鍵值對
  • 使用類的初始化來建立一個HashMap
HashMap<Integer, String> sites = new HashMap<Integer, String>();
添加元素
  • 通過put()方法來添加鍵值對映射
public class Init {//main函數,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}

訪問元素
  • 使用get(key)方法來通過key獲取value
System.out.println(sites.get(3));
刪除元素
  • 使用remove(key)方法類刪除key對應的鍵值對(key-value)
import java.util.HashMap;public class Init {//main函數,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);sites.remove(2);System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}
{1=Google, 3=Microsoft}

刪除所有元素
  • 使用clear()方法來刪除所有的元素
import java.util.HashMap;public class Init {//main函數,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);sites.clear();System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}
{}

迭代HashMap
  • 使用for-each來迭代HashMap的元素
  • 如果你只想獲取 key,可以使用 keySet() 方法,然后可以通過 get(key) 獲取對應的 value,如果你只想獲取 value,可以使用 values() 方法。
import java.util.HashMap;public class Init {//main函數,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");for(Integer i : sites.keySet()){System.out.println("Key: "+i+", Values: "+sites.get(i));}for(String value: sites.values()){System.out.println(value+" ");}}
}

Key: 1, Values: Google
Key: 2, Values: Baidu
Key: 3, Values: Microsoft
Google
Baidu
Microsoft

Iterator迭代器

  • Java迭代器是Java集合框架中的一種機制,提供了一種在不暴露集合內部實現的情況下遍歷集合元素的方法。
  • 是一種訪問集合的方法,可用于迭代ArrayList、HashSet等集合。
  • Iterator是Java迭代器最簡單的實現
  • 三個基本操作:next()、hasNext()、remove()
獲取一個迭代器
  • 使用iterator()方法來初始化一個迭代器
import java.util.Iterator;public class Init {//main函數,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();System.out.println(it.next());System.out.println(it.next());System.out.println(it.next());}
}

Zhangsan
Lisi
Wangwu

如果超過了遍歷的范圍,就會報錯

循環集合元素
import java.util.ArrayList;
import java.util.Iterator;public class Init {//main函數,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}}
}
刪除元素
  • 使用remove()方法來刪除元素
  • 下面方法通過remove()刪除"Lisi"元素
import java.util.ArrayList;
import java.util.Iterator;public class Init {//main函數,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();while(it.hasNext()){String tmp = it.next();if(tmp.equals("Lisi")){it.remove();}}}
}

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

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

相關文章

筆記/使用Excel進行財務預測

文章目錄金融預測的決策與數據收集決定財務問題收集財務數據清理與合并財務數據解釋與應用預測結果使用excel進行財務回歸分析回歸預測的步驟解釋回歸結果在 Excel 中執行預測財務分析指標財務分析常用指標一覽表財務指標的相關性對競爭對手進行基準測試財務指標的趨勢分析持續…

力扣1287:有序數組中出現次數超過25%的元素

力扣1287:有序數組中出現次數超過25%的元素題目思路代碼題目 給你一個非遞減的 有序 整數數組&#xff0c;已知這個數組中恰好有一個整數&#xff0c;它的出現次數超過數組元素總數的 25%。 請你找到并返回這個整數 思路 哈希表秒了 代碼 class Solution { public:int fi…

如何用 Z.ai 生成PPT,一句話生成整套演示文檔

大家好&#xff0c;這里是K姐。 一個幫你追蹤最新AI應用的女子。 最近朋友給我分享了一個好玩的頁面截圖。 一眼看過去&#xff0c;就感覺這PPT的文字排版很有人工味。 我立馬就去試了一下&#xff0c;才發現它根本不是傳統的 PPT&#xff0c;而是一種網頁式的 Slides 。 做…

C/C++ 編程:掌握靜態庫與動態庫的編譯

在 C/C 項目開發中&#xff0c;理解并掌握如何編譯和使用庫文件是至關重要的一環。庫允許你將常用的函數和代碼模塊化&#xff0c;從而提高代碼重用性、簡化項目管理并縮短編譯時間。最常見的兩種庫類型是靜態庫 (.a) 和動態庫 (.so)。它們各有優缺點&#xff0c;適用于不同的開…

汽車安全 | 汽車安全入門

引言 汽車安全不僅僅是對汽車/車輛進行物理入侵。這只是很小且簡單的一部分。當你以攻擊者/對手的思維去看待一輛聯網汽車時&#xff0c;你關注的是整個車輛生態系統。這不僅包括它如何與外部實體通信&#xff0c;也包括它在車內如何運作。 汽車是主要的交通工具&#xff0c;…

CLIP與SIGLIP對比淺析

CLIP 和 SIGLIP 的核心區別在于損失函數的設計&#xff1a;CLIP 使用基于 softmax 的對比損失&#xff08;InfoNCE&#xff09;&#xff0c;強制正樣本在全局對比中壓倒所有負樣本&#xff0c;計算成本高且受限于負樣本數量&#xff1b;SIGLIP 改用基于 sigmoid 的二元分類損失…

移動管家手機控車便捷性如何

移動管家4G手機控車-全面升級一鍵啟動、無鑰匙進入、手機啟動、手機開關鎖、手機開尾箱、手機尋車、車輛診斷、GPS北斗定位、電子圍欄、車輛授權、車輛防盜搶、胎壓檢測、預約啟動、車窗控制、車況提醒等功&#xff1b;移動管家手機控車系統&#xff08;以“移動管家控車APP”為…

MySQL 8.4.4詳細下載安裝配置

1、下載mysql8.4.4文件&#xff0c;取zip文件 mysql8.4.4下載路徑 MySQL 5.7.31詳細下載安裝配置 2、配置環境變量 1.系統—>高級系統設置—>環境變量—>系統變量 在系統變量中點擊新建&#xff0c;變量名為量名為&#xff1a;MYSQL_HOME&#xff0c;添加你的mys…

在 Linux 上安裝 `pgvector`(這是一個 PostgreSQL 的向量類型擴展,常用于處理嵌入向量,便于進行向量相似度搜索)

全文 4000 字&#xff0c;配圖配碼&#xff0c;已在多家企業落地驗證。閱讀完如有收獲&#xff0c;文末投票告訴我你最關注的方向&#xff0c;我會在下一篇文章里繼續深入。 0. pgvector 簡介 pgvector 是一款 PostgreSQL 原生向量數據類型擴展&#xff0c;核心能力&#xff1…

【項目實戰】——深度學習.全連接神經網絡

目錄 1.使用全連接網絡訓練和驗證MNIST數據集 2.使用全連接網絡訓練和驗證CIFAR10數據集 1.使用全連接網絡訓練和驗證MNIST數據集 import torch from torch import nn from torchvision import datasets, transforms from torch.utils.data import DataLoader from torch im…

嵌入式學習的第三十四天-進程間通信-TCP

一、TCPTCP : 傳輸控制協議 傳輸層1. TCP特點(1).面向連接,避免部分數據丟失 (2).安全、可靠 (3).面向字節流 (4).占用資源開銷大2.TCP安全可靠機制三次握手:指建立tcp連接時&#xff0c;需要客戶端和服務端總共發送三次報文確認連接。確保雙方均已做好 收發…

【爬蟲】06 - 自動化爬蟲selenium

自動化爬蟲selenium 文章目錄自動化爬蟲selenium一&#xff1a;Selenium簡介1&#xff1a;什么是selenium2&#xff1a;安裝準備二&#xff1a;元素定位1&#xff1a;id 定位2&#xff1a;name 定位3&#xff1a;class 定位4&#xff1a;tag 定位5&#xff1a;xpath 定位(最常用…

2025年中國移動鴻鵠大數據實訓營(大數據方向)kafka講解及實踐-第2次作業指導

書接上回&#xff0c;第二次作業比較容易解決&#xff0c;我問了ai&#xff0c;讓他對我進行指導&#xff0c;按照它提供的步驟&#xff0c;我完成了本次實驗&#xff0c;接下來我會標注出需要注意的細節&#xff0c;指導大家完成此次任務。 &#x1f3af; 一、作業目標 ??…

三十七、【高級特性篇】定時任務:基于 APScheduler 實現測試計劃的靈活調度

三十七、【高級特性篇】定時任務:基于 APScheduler 實現測試計劃的靈活調度 前言 準備工作 第一部分:后端實現 - `APScheduler` 集成與任務調度 1. 安裝 `django-apscheduler` 2. 配置 `django-apscheduler` 3. 數據庫遷移 4. 創建調度觸發函數 5. 啟動 APScheduler 調度器 6…

RabbitMQ--消息順序性

看本章之前強烈建議先去看博主的這篇博客 RabbitMQ--消費端單線程與多線程-CSDN博客 一、消息順序性概念 消息順序性是指消息在生產者發送的順序和消費者接收處理的順序保持一致。 二、RabbitMQ 順序性保證機制 情況順序保證情況備注單隊列&#xff0c;單消費者消息嚴格按發送順…

.net core接收對方傳遞的body體里的json并反序列化

1、首先我在通用程序里有一個可以接收對象型和數組型json串的反序列化方法public static async Task<Dictionary<string, string>> AllParameters(this HttpRequest request){Dictionary<string, string> parameters QueryParameters(request);request.Enab…

(10)機器學習小白入門 YOLOv:YOLOv8-cls 模型評估實操

YOLOv8-cls 模型評估實操 (1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv &#xff1a;圖片標注實操手冊 (5)機器學習小…

Vue 腳手架基礎特性

一、ref屬性1.被用來給元素或子組件注冊引用信息&#xff08;id的替代者&#xff09;2.應用在html標簽上獲取的是真實DOM元素&#xff0c;用在組件標簽上是組件實例對象3.使用方式&#xff1a;(1).打標識&#xff1a;<h1 ref"xxx">...</h1> 或 <Schoo…

Ubuntu安裝k8s集群入門實踐-v1.31

準備3臺虛擬機 在自己電腦上使用virtualbox 開了3臺1核2G的Ubuntu虛擬機&#xff0c;你可以先安裝好一臺&#xff0c;安裝第一臺的時候配置臨時調高到2核4G&#xff0c;安裝速度會快很多&#xff0c;安裝完通過如下命令關閉桌面&#xff0c;能夠省內存占用&#xff0c;后面我們…

Word Press富文本控件的保存

新建富文本編輯器&#xff0c;并編寫save方法如下&#xff1a; edit方法&#xff1a; export default function Edit({ attributes, setAttributes }) {return (<><div { ...useBlockProps() }><RichTexttagNameponChange{ (value) > setAttributes({ noteCo…