集合-進階

Collection

collection的遍歷方式

  • 迭代器遍歷
    • 不依賴索引
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.創建集合并添加元素Collection<String> coll = new ArrayList();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");//2.獲取迭代器對象//迭代器就好比是一個箭頭,指向集合中的0索引處Iterator<String> it = coll.iterator();//3.利用循環不斷的去獲取集合中的每一個元素while(it.hasNext()) {//4.next方法夫人兩件事情:獲取元素并移動指針String str = it.next();System.out.println(str);}}
}
  • 迭代器的細節注意點:

1.報錯NoSuchElementException

2.迭代器遍歷完畢,指針不會復位

3.循環中只能用一次next方法

4.迭代器遍歷時,不能用集合的方法進行增加或者刪除

增強for

//快速生成方式:
//集合的名字+for回車
//1.創建集合并添加元素
collection<string> coll new arrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//2.利用增強for進行遍歷
//注意點:
1/s其實就是一個第三方變量,在循環的過程中依次表示集合中的每一個數據
for(string s : coll){s "qqq"'
system.out.println(coll);//zhangsan lisi wangwu

List集合

  • 刪除元素

請問:此時刪除的是1這個元素,還是1索引上的元素?

為什么?

因為在調用方法的時候,如果方法出現了重載現象

優先調用,實參跟形參類型一致的那個方法。

list.remove(1);

  • 練習
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;public class mylist {public static void main(String[] args) {//1.創建列表并添加元素List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");//1.迭代器方式遍歷Iterator<String> it = list.iterator();while (it.hasNext()) {String str = it.next();System.out.println(str);}//2.增強for//下面的變量s,其實是一個第三方的變量而已//在循環的過程中,依次表示集合中的每一個元素for (String str : list) {System.out.println(str);}//3.Lambda表達式//forEach方法的底層啟示就是一個循環遍歷,依次得到集合的每一個元素//并把每一個元素傳遞給下面的accept方法//accept方法的形參s,依次表示集合的每一個元素list.forEach(s-> System.out.println(s));}
}

數據結構

  • 棧的特點:后進先出,先進后出

隊列

  • 隊列特點:先進先出,后進后出
  • 數據從后端進入隊列模型的過程稱為:入隊列

數據從前端離開隊列模型的過程稱為:出隊列

鏈表

  • 鏈表中的結點是獨立的對象,在內存中是不連續的,每個結點包含數據值和下一個結點的地址。
  • 鏈表查詢慢,無論查詢哪個數據都要從頭開始找。
  • 鏈表增刪相對快

ArrayList

  • 底層源碼

LinkedList集合

  • 底層數據結構是雙鏈表,查詢慢,增刪快,但是如果操作的是首尾元素,速度也是極快的。
  • LinkedList本身多了很多直接操作首尾元素的特有API。

泛型深入

  • 統一數據類型。
  • 把運行時期的問題提前到了編譯期間,避免了強制類型轉換可能出現的異常,因為在編譯階段類型就能確定下來。

泛型的細節

  • 泛型中不能寫基本數據類型
  • 指定泛型的具體類型后,傳遞數據時,可以傳入該類類型或者其子類類型

  • 如果不寫泛型,類型默認是Object

泛型可以在很多地方進行定義

泛型接口

  • 泛型不具備繼承性
  • 此時,泛型里面寫的是什么類型,那么只能傳遞什么類型的的數據

弊端:

利用泛型方法有一個小弊端,此時他可以接受任意的數據線類型

Ye Fu Zi Student

希望:本方法雖然不確定類型,但是以后我希望只能傳遞 Ye Fu Zi

此時我們就可以使用泛型的通配符:

?也表示不確定的類型

他可以進行類型的限定

?extendsE:表示可以傳遞E或者E所有的子類類型

?superE:表示可以傳遞E或者E所有的父類類型

TreeSet

package TreeSetDemo;import java.util.TreeSet;
import java.util.function.Consumer;public class TreeSetDemo2 {public static void main(String[] args) {/*需求:創建5個學生對象屬性:(姓名,年齡,語文成績,數學成績,英語成績),按照總分從高到低輸出到控制臺如果總分一樣,按照語文成績排如果語文一樣,按照數學成績排如果數學成績一樣,按照英語成績排如果英文成績一樣,按照年齡排如果年齡一樣,按照姓名的字母順序排如果都一樣,認為是同一個學生,不存。*///默認排序//創建學生對象Student s1 = new Student("zhangsan",23,77,88,99);Student s2 = new Student("lisi",23,87,67,99);Student s3 = new Student("wangwu",23,67,85,78);Student s4 = new Student("zhaoliu",23,87,86,87);//創建集合TreeSet<Student> treeSet = new TreeSet<Student>();treeSet.add(s1);treeSet.add(s2);treeSet.add(s3);treeSet.add(s4);//增強forfor (Student t : treeSet) {System.out.println(t);}}
}
package TreeSetDemo;public class Student implements Comparable<Student>{private String name;private int age;private int chinese;private int math;private int english;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", chinese=" + chinese +", math=" + math +", english=" + english +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}public Student(String name, int age, int chinese, int math, int english) {this.name = name;this.age = age;this.chinese = chinese;this.math = math;this.english = english;}public Student() {}@Overridepublic int compareTo(Student o) {int sum1 = this.getChinese() + this.getMath() + this.getEnglish();int sum2 = o.getChinese() + o.getMath() + o.getEnglish();int i = sum1 - sum2;i = i == 0 ? this.getChinese() - o.getChinese() : i;i = i == 0 ? this.getMath()- o.getMath() : i;i = i == 0 ? this.getEnglish()- o.getEnglish() : i;i = i ==0 ? this.getAge() - o.getAge() : i;i = i ==0 ? this.getName().compareTo(o.getName()) : i;return i;}
}

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

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

相關文章

【八股戰神篇】Java集合高頻面試題

專欄簡介 八股戰神篇專欄是基于各平臺共上千篇面經&#xff0c;上萬道面試題&#xff0c;進行綜合排序提煉出排序前百的高頻面試題&#xff0c;并對這些高頻八股進行關聯分析&#xff0c;將每個高頻面試題可能進行延伸的題目再次進行排序選出高頻延伸八股題。面試官都是以點破…

Android之橫向滑動列表

文章目錄 前言一、效果圖二、使用步驟1.xml布局2.代碼3.HomeHxBean3.adapter4.item布局5.兩個drawable 總結 前言 橫向滑動列表有多種實現方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介紹recyclerview。 一、效果圖 二、使用步驟…

關于物聯網的基礎知識(二)——物聯網體系結構分層

成長路上不孤單&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///計算機愛好者&#x1f60a;///持續分享所學&#x1f60a;///如有需要歡迎收藏轉發///&#x1f60a;】 今日分享關于物聯網的基礎知識&#xff08;二&a…

【機器人】復現 WMNav 具身導航 | 將VLM集成到世界模型中

WMNav 是由VLM視覺語言模型驅動的&#xff0c;基于世界模型的對象目標導航框架。 設計一種預測環境狀態的記憶策略&#xff0c;采用在線好奇心價值圖來量化存儲&#xff0c;目標在世界模型預測的各種場景中出現的可能性。 本文分享WMNav復現和模型推理的過程&#xff5e; 下…

英語學習5.17

attract &#x1f449; 前綴&#xff1a;at-&#xff08;朝向&#xff09; &#x1f449; 含義&#xff1a;吸引&#xff08;朝某處拉&#xff09; 例句&#xff1a;The flowers attract bees. &#xff08;花吸引蜜蜂。&#xff09; distract &#x1f449; 前綴&#xff…

【軟考 McCabe度量法】

McCabe度量法&#xff08;McCabe’s Cyclomatic Complexity&#xff09;是由Thomas McCabe提出的一種用于衡量程序模塊環路復雜性的軟件度量方法。它通過分析代碼的控制流結構來評估程序的復雜度&#xff0c;幫助開發者識別難以維護或測試風險較高的代碼區域。 一、McCabe度量法…

解讀 TypeScript 枚舉Enum

TypeScript 枚舉通過命名常量、類型安全和結構化組織&#xff0c;顯著提升代碼質量。使用時需根據場景選擇合適的類型&#xff08;數字、字符串或常量枚舉&#xff09;&#xff0c;并權衡性能與動態訪問需求。掌握其特性和使用的場景&#xff0c;能在復雜項目中有效提升代碼的可…

MODBUS RTU通信協議詳解與調試指南

一、MODBUS RTU簡介 MODBUS RTU&#xff08;Remote Terminal Unit&#xff09;是一種基于串行通信&#xff08;RS-485/RS-232&#xff09;的工業標準協議&#xff0c;采用二進制數據格式&#xff0c;具有高效、可靠的特點&#xff0c;廣泛應用于PLC、傳感器、變頻器等工業設備…

TCP/UDP協議原理和區別 筆記

從簡單到難吧 區別就是TCP一般用于安全穩定的需求&#xff0c;UDP一般用于不那么需要完全數據的需求&#xff0c;比如說直播&#xff0c;視頻等。 再然后就是TPC性能慢于UDP。 再然后我們看TCP的原理&#xff08;三次握手&#xff0c;數據傳輸&#xff0c;四次揮手&#xff0…

Jackson使用詳解

JSON Jackson是java提供處理json數據序列化和反序列的工具類&#xff0c;在使用Jackson處理json前&#xff0c;我們得先掌握json。 JSON數據類型 類型示例說明字符串&#xff08;String&#xff09;"hello"雙引號包裹&#xff0c;支持轉義字符&#xff08;如 \n&a…

C語言| 指針變量的定義

C語言| 指針的優點-CSDN博客 * 表示“指向”&#xff0c;為了說明指針變量和它所指向的變量之間的聯系。 int * i&#xff1b;//表示指針變量i里面存放的地址&#xff0c;所指向的存儲單元里的【數據】。 【指針變量的定義】 C語言規定所有變量&#xff0c;在使用前必須先定…

Java 快速轉 C# 教程

以下是一個針對 Java 開發者快速轉向 C# 的簡明教程&#xff0c;重點對比 Java 與 C# 的異同&#xff0c;幫助你快速上手。 項目結構&#xff1a; .sln &#xff1a;解決方案文件&#xff0c;管理多個項目之間的依賴關系。.csproj &#xff1a;項目文件&#xff0c;定義目標框…

EasyExcel詳解

文章目錄 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底層邏輯~~4.easyExcel write的底層邏輯~~ 二、FastExcel1.為什么更換為fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 內容摘自官方&#xff1a;Java解析、生成Excel比較有名的…

jvm安全點(三)openjdk17 c++源碼垃圾回收之安全點結束,喚醒線程

1. VMThread::inner_execute() - 觸發安全點?? cpp 復制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 進入安全點&#xff0c;阻塞所有線程 // ...執行GC等操作... SafepointSynchronize::…

102. 二叉樹的層序遍歷遞歸法:深度優先搜索的巧妙應用

二叉樹的層序遍歷是一種經典的遍歷方式&#xff0c;它要求按層級逐層訪問二叉樹的節點。通常我們會使用隊列來實現層序遍歷&#xff0c;但遞歸法也是一種可行且有趣的思路。本文將深入探討遞歸法解決二叉樹層序遍歷的核心難點&#xff0c;并結合代碼和模擬過程進行詳細講解。 …

首個窗口級無人機配送VLN系統!中科院LogisticsVLN:基于MLLM實現精準投遞

導讀 隨著智能物流需求日益增長&#xff0c;特別是“最后一公里”配送場景的精細化&#xff0c;傳統地面機器人逐漸暴露出適應性差、精度不足等瓶頸。為此&#xff0c;本文提出了LogisticsVLN系統——一個基于多模態大語言模型的無人機視覺語言導航框架&#xff0c;專為窗戶級別…

WPF Datagrid 數據加載和性能

這篇文章并非討論 WPF Datagrid 的性能數據&#xff0c;而只是簡單介紹一下為了使其性能良好&#xff0c;你需要注意哪些方面。我不太想使用性能分析器來展示實際數據&#xff0c;而是盡可能地使用了 Stopwatch 類。這篇文章不會深入探討處理海量數據的技術&#xff0c;例如分頁…

matlab求矩陣的逆、行列式、秩、轉置

inv - 計算矩陣的逆 用途&#xff1a;計算一個可逆矩陣的逆矩陣。 D [1, 2; 3, 4]; % 定義一個2x2矩陣 D_inv inv(D); % 計算矩陣D的逆 disp(D_inv);det - 計算矩陣的行列式 用途&#xff1a;計算方陣的行列式。 E [1, 2; 3, 4]; determinant det(E); % 計算行列式 disp…

ridecore流水線解讀

文章目錄 流水線stage分屬前后端PCpipelineIFIDDPDP 與 SW 中間沒有latchSWCOM 源碼地址 流水線stage分屬前后端 IF -> ID -> DP -> SW -> EX -> COM分類階段說明前端IF指令獲取階段。PC 使用分支預測器&#xff0c;訪問指令存儲器。典型前端操作。前端ID解碼并…

【SpringBoot】關于MP使用中配置了數據庫表前綴的問題

problem 使用MP時&#xff0c;在application.yml配置文件中配置了MP匹配數據庫表中的表名時的前綴作了規定&#xff0c;如下&#xff1a; 那么當我運行時報錯了錯誤&#xff0c;報錯信息如下&#xff1a; 因為我數據庫表的書類表名是book&#xff0c;MP在匹配時使用了表名前…