Java Collections 類中常用方法使用

一、Collections類

? ? ?java.util.Collections 類是 Java 集合框架中的一個工具類,提供了一系列靜態方法來操作和處理各種類型的集合。這些方法簡化了對集合進行排序、查找、同步控制、創建只讀集合等常見操作的過程。

二、常用方法

方法類別??方法簽名??功能??需求/約束??算法/返回值?
?排序?sort(List<T> list)對列表元素按自然順序升序排序元素必須實現?Comparable?接口歸并排序或 TimSort
sort(List<T> list, Comparator<? super T> c)按自定義比較器排序需提供?Comparator?對象同上
?查找?binarySearch(List<? extends Comparable<? super T>> list, T key)二分查找元素列表必須已按自然順序排序找到返回索引;未找到返回?-(插入點) - 1
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)使用自定義比較器二分查找列表必須按比較器規則排序同上
?最大值/最小值?max(Collection<? extends T> coll)返回集合中的最大元素元素實現?Comparable?接口-
min(Collection<? extends T> coll)返回集合中的最小元素同上-
max(Collection<? extends T> coll, Comparator<? super T> comp)使用比較器返回最大元素需提供?Comparator-
min(Collection<? extends T> coll, Comparator<? super T> comp)使用比較器返回最小元素同上-
?反轉?reverse(List<?> list)反轉列表元素順序--
?隨機排序?shuffle(List<?> list)隨機打亂列表順序-默認使用?Random?類
shuffle(List<?> list, Random rnd)使用指定隨機源打亂順序需提供?Random?對象-
?填充?fill(List<? super T> list, T obj)用指定對象填充列表所有元素目標列表長度不變-
?復制?copy(List<? super T> dest, List<? extends T> src)將源列表元素復制到目標列表目標列表長度 ≥ 源列表長度直接覆蓋目標列表元素
?交換?swap(List<?> list, int i, int j)交換列表中兩個索引位置的元素i?和?j?必須在列表有效范圍內-

三、綜合應用

1、操作學生信息如下:

  1. 創建學生列表
  2. 添加學生
  3. 打印原始學生列表
  4. 對學生列表進行排序(按年齡升序)
  5. 查找年齡最大的學生
  6. 查找年齡最小的學生
  7. 反轉學生列表
  8. 替換年齡最小的學生的信息
  9. 填充學生列表
  10. 復制學生列表
  11. 交換兩個學生的位置
  12. 旋轉學生列表
  13. 隨機打亂學生列表
  14. 使用二分查找查找特定學生(按年齡排序后,但示例中查找的年齡與注釋不匹配)

2、編碼

? ?Student類

public class Student {private String id;private String name;private int age;public Student(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}// Getters 和 Setterspublic String getId() {return id;}public void setId(String id) {this.id = id;}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;}@Overridepublic String toString() {return "Student{id='" + id + "', name='" + name + "', age=" + age + "}";}}
StudentManager類
public class StudentManager {public static void main(String[] args) {// 創建學生列表List<Student> students = new ArrayList<>();// 添加學生students.add(new Student("001", "Alice", 22));students.add(new Student("002", "Bob", 25));students.add(new Student("003", "Charlie", 23));students.add(new Student("004", "Diana", 21));// 打印原始學生列表System.out.println("原始數據:");for (Student student : students) {System.out.println(student);}// 對學生列表進行排序(按年齡升序)Collections.sort(students, Comparator.comparing(Student::getAge));System.out.println("\n按年齡升序:");for (Student student : students) {System.out.println(student);}// 查找年齡最大的學生Student oldestStudent = Collections.max(students, Comparator.comparing(Student::getAge));System.out.println("\n年齡最大的學生:");System.out.println(oldestStudent);// 查找年齡最小的學生Student youngestStudent = Collections.min(students, Comparator.comparing(Student::getAge));System.out.println("\n年齡最小的學生:");System.out.println(youngestStudent);// 反轉學生列表Collections.reverse(students);System.out.println("\n反轉:");for (Student student : students) {System.out.println(student);}// 替換年齡最小的學生的信息(例如,替換為另一個學生)Collections.replaceAll(students, youngestStudent, new Student("005", "Eve", 20));System.out.println("\n替換:");for (Student student : students) {System.out.println(student);}// 填充學生列表(用特定學生填充)Collections.fill(students, new Student("006", "Fiona", 24));System.out.println("\n填充:");for (Student student : students) {System.out.println(student);}// 復制學生列表List<Student> copiedStudents = new ArrayList<>(students);Collections.copy(copiedStudents, students);System.out.println("\n復制:");for (Student student : copiedStudents) {System.out.println(student);}// 交換兩個學生的位置,例如,將第一個和最后一個學生交換位置Collections.swap(students, 0, students.size() - 1);System.out.println("\n交換:");for (Student student : students) {System.out.println(student);}// 旋轉學生列表,例如,將列表向右旋轉2個位置Collections.rotate(students, 2);System.out.println("\n旋轉:");for (Student student : students) {System.out.println(student);}// 隨機打亂學生列表Collections.shuffle(students);System.out.println("\n隨機打亂:");for (Student student : students) {System.out.println(student);}// 使用二分查找查找特定學生(按年齡排序后)
//        Student targetStudent = new Student("000", "Non-existent", 21); // 假設要查找年齡為21的學生Student targetStudent = new Student("000", "Non-existent", 27); // 假設要查找年齡為27的學生int index = Collections.binarySearch(students, targetStudent, Comparator.comparing(Student::getAge));if (index >= 0) {System.out.println("\n年齡是21的學生索引: " + index);System.out.println(students.get(index));} else {System.out.println("\n沒有找到年齡是21的學生索引: " + (-index - 1));}}
}

3、效果

?

四、總結

? ? ? Collections 類提供的方法大大簡化了對集合的操作,通過合理的選擇和使用這些方法,可以高效地實現各種集合處理邏輯。需要注意的是,某些方法(如排序和二分查找)對集合的狀態(如排序狀態)有要求,使用時需要確保滿足這些要求,以避免異常或錯誤的結果。

?

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

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

相關文章

Linux網絡編程——數據鏈路層詳解,以太網、MAC地址、MTU、ARP、DNS、NAT、代理服務器......

目錄 一、前言 二、以太網 二、以太網幀格式 三、 MAC地址 四、MTU 1、數據鏈路層的數據分片 2、MTU對UDP協議的影響 3、MTU對TCP協議的影響 五、ARP協議 1、什么是ARP 2、ARP的作用 3、ARP協議的工作流程 4、ARP緩存表 5、ARP請求報文 6、中間人 六、DNS&…

輕量級開源文件共享系統PicoShare本地部署并實現公網環境文件共享

&#xfeff;## 前言 本篇文章介紹&#xff0c;如何在 Linux 系統本地部署輕量級文件共享系統 PicoShare&#xff0c;并結合 Cpolar 內網穿透實現公網環境遠程傳輸文件至本地局域網內文件共享系統。 PicoShare 是一個由 Go 開發的輕量級開源共享文件系統&#xff0c;它沒有文…

基于查表法的 CRC8 / CRC16 / CRC32校驗解析

在嵌入式開發中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff09;循環冗余校驗算法廣泛應用于通信數據校驗、Flash 數據完整性檢測、Bootloader 升級驗證等場景。本文將深入剖析一套完整的 CRC8、CRC16 和 CRC32 實現&#xff0c;并通過查表法&#xff08;Table…

二戰藍橋杯所感

&#x1f334; 前言 今天是2025年4月12日&#xff0c;第十六屆藍橋杯結束&#xff0c;作為二戰的老手&#xff0c;心中還是頗有不甘的。一方面&#xff0c;今年的題目比去年簡單很多&#xff0c;另一方面我感覺并沒有把能拿的分都拿到手&#xff0c;這是我覺得最遺憾的地方。不…

基于ueditor編輯器的功能開發之給編輯器圖片增加水印功能

用戶需求&#xff0c;雙擊編輯器中的圖片的時候&#xff0c;出現彈框&#xff0c;用戶可以選擇水印縮放倍數、距離以及水印所放置的方位&#xff08;當然有很多水印插件&#xff0c;位置大小透明度用戶都能夠自定義&#xff0c;但是用戶需求如此&#xff0c;就自己寫了&#xf…

算法題(123):回文日期

審題&#xff1a; 本題需要我們判斷以八位數確定的日期范圍中是否存在回文數 思路&#xff1a; 方法一&#xff1a;枚舉法 1.確定枚舉對象&#xff1a; 對象1&#xff1a;八位數日期&#xff0c;所需枚舉次數&#xff1a;10^8 對象2&#xff1a;年&#xff0c;所需枚舉次數&…

數據庫表的操作

一、數據庫的搭建 如上篇文章 二、基礎了解 show命令支持模糊匹配 show databases、show tables、 show databases like “” “%”、“_”通配符字符串 三、MySQL數據庫表的操作 關系型數據庫都是遵循SQL語法進行數據查詢和管理的 3.1 SQL介紹 3.1.1 SQL的功能 結構化查詢語…

在 Lua 中實現 JSON 與 Table 的相互轉換的詳細使用方法

在 Lua 中實現 JSON 與 Table 的相互轉換是常見的數據序列化需求。以下是詳細的實現方案、性能優化技巧及進階用法&#xff1a; 在 Lua 中實現 JSON 與 Table 的相互轉換的詳細使用方法-目錄 一、常用 JSON 庫對比二、基礎轉換實現1. 使用 lua-cjson&#xff08;高性能 C 庫&am…

dbVisitor 規則怎么用?

在數據庫操作中&#xff0c;dbVisitor 是一個功能強大的工具&#xff0c;其規則的使用大大簡化了 SQL 語句的編寫過程。下面將詳細介紹 dbVisitor 規則的使用方法并附上具體例子。 一、規則的基本調用 在 dbVisitor 中&#xff0c;SQL 語句可以通過 {...} 的形式來調用規則&a…

Kingbase 常用運維命令總結

一、數據庫連接與基礎操作 連接指定服務器數據庫 ksql -h 主機IP -p 端口號 -U 用戶名 -d 數據庫名 -W # 示例&#xff1a;連接 IP 為 192.168.1.100 的數據庫 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 斷開數據庫連接 \q 或 exit 查看數據庫列表及詳細信息…

【數據結構與算法】LRU Cache 算法實現

文章目錄 Ⅰ. 什么是 LRU CacheⅡ. LRU Cache 的實現[146. LRU 緩存](https://leetcode.cn/problems/lru-cache/) Ⅰ. 什么是 LRU Cache ? LRU&#xff08; Least Recently Used&#xff09; 是一種淘汰策略的縮寫&#xff0c;意思是 最近最少使用&#xff0c;它是一種 Cache…

網頁布局匯總

1. 盒模型 容器大小 內容大小 內邊距(padding) 邊框大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

打造海外流量矩陣,TikTok云控工具讓獲客更簡單!

跨境獲客&#xff0c;始終是無數企業主心中的一道難題。今天&#xff0c;給大家帶來一款強大實用的工具——TikTok矩陣云控系統&#xff0c;幫你輕松突破流量瓶頸&#xff0c;實現高效跨境獲客&#xff01; 跨國遠程操控——蘋果手機矩陣云控系統 在正式開始之前&#xff0c;…

MyBatis-plus 快速入門

提示&#xff1a;MyBatis-Plus&#xff08;MP&#xff09;是一個 MyBatis的增強版 文章目錄 前言使用MybatisPlus的基本步驟1、引入MybatisPlus依賴代替Mybatis依賴2、定義Mapper接口并繼承BaseMapper他是怎么知道哪張表&#xff0c;哪些字段呢 3、實體類注解4、根據需要添加配…

找搭子系統 搭子經濟新風口 基于精準匹配的社交新生態探索

一、市場前景&#xff1a;為什么現在需要"找搭子"&#xff1f; 孤獨經濟爆發 超60%年輕人存在"精準陪伴"需求&#xff08;2024社交報告&#xff09; 傳統社交App無法滿足"非婚戀、非熟人"的中間態需求 線下活動復蘇 劇本殺/飛盤等興趣活動年增…

深入探析C#設計模式:訪問者模式(Visitor Pattern)的原理與應用

引言 在軟件開發中&#xff0c;設計模式為我們提供了高效、可維護的解決方案。而在眾多設計模式中&#xff0c;訪問者模式&#xff08;Visitor Pattern&#xff09;以其獨特的結構和應用場景&#xff0c;在復雜系統中發揮著重要作用。本文將深入講解訪問者模式的定義、原理、優…

Redis核心功能實現

前言 學習是個輸入的過程&#xff0c;在進行輸入之后再進行一些輸出&#xff0c;比如寫寫文章&#xff0c;筆記&#xff0c;或者做一些技術串講&#xff0c;雖然需要花費不少時間&#xff0c;但是好處很多&#xff0c;首先是能通過輸出給自己的輸入帶來一些動力&#xff0c;然…

RPA VS AI Agent

圖片來源網絡 RPA&#xff08;機器人流程自動化&#xff09;和AI Agent&#xff08;人工智能代理&#xff09;在自動化和智能化領域各自扮演著重要角色&#xff0c;但它們之間存在顯著的區別。以下是對兩者區別的詳細分析&#xff1a; 一、定義與核心功能 RPA&#xff08;機…

多模態大語言模型arxiv論文略讀(十五)

Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ?? 論文標題&#xff1a;Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ?? 論文作者&#xff1a;Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ?? 研究機構…

第1節:計算機視覺發展簡史

計算機視覺與圖像分類概述&#xff1a;計算機視覺發展簡史 計算機視覺&#xff08;Computer Vision&#xff09;作為人工智能領域的重要分支&#xff0c;是一門研究如何使機器"看"的科學&#xff0c;更具體地說&#xff0c;是指用攝影機和計算機代替人眼對目標進行識…