java中list的api詳細使用

在Java中,List是集合框架中最常用的接口之一,繼承自Collection,代表有序、可重復的元素集合(允許null元素)。其核心實現類有ArrayList(數組實現,隨機訪問高效)、LinkedList(鏈表實現,增刪首尾元素高效)等。以下按功能分類詳解List的常用API及使用示例:

一、添加元素(增)

向List中添加單個或批量元素,支持指定位置插入。

1. boolean add(E e)
  • 功能:在List末尾添加元素e
  • 返回值true(始終返回,因為List允許添加元素)。
  • 示例
List<String> list = new ArrayList<>();
list.add("A"); // 末尾添加"A"
list.add("B"); // 末尾添加"B"
System.out.println(list); // [A, B]
2. void add(int index, E element)
  • 功能:在指定索引index處插入元素element(原索引及后續元素后移)。
  • 注意index必須在[0, size()]范圍內(否則拋IndexOutOfBoundsException)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
list.add(1, "C"); // 在索引1處插入"C"
System.out.println(list); // [A, C, B](原索引1的"B"后移)
3. boolean addAll(Collection<? extends E> c)
  • 功能:將集合c中的所有元素批量添加到List末尾
  • 返回值:若List因添加而改變則返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
List<String> newElements = Arrays.asList("C", "D");
list.addAll(newElements); // 批量添加到末尾
System.out.println(list); // [A, B, C, D]
4. boolean addAll(int index, Collection<? extends E> c)
  • 功能:將集合c中的所有元素從指定索引index處開始插入(原索引及后續元素后移)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
List<String> newElements = Arrays.asList("C", "D");
list.addAll(1, newElements); // 從索引1處插入
System.out.println(list); // [A, C, D, B]

二、刪除元素(刪)

移除List中的單個或批量元素,支持按索引或元素值刪除。

1. E remove(int index)
  • 功能:刪除指定索引index處的元素,返回被刪除的元素(后續元素前移)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String removed = list.remove(1); // 刪除索引1的元素
System.out.println(removed); // B
System.out.println(list); // [A, C]
2. boolean remove(Object o)
  • 功能:刪除首次出現的元素o(通過equals()判斷),返回是否刪除成功。
  • 注意:若元素為null,會刪除首次出現的null(因為null.equals()會拋異常,內部用==判斷null)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "A"));
boolean isRemoved = list.remove("A"); // 刪除首次出現的"A"
System.out.println(isRemoved); // true
System.out.println(list); // [B, A]
3. boolean removeAll(Collection<?> c)
  • 功能:刪除List中所有包含在集合c中的元素(批量刪除,保留不在c中的元素)。
  • 返回值:若List因刪除而改變則返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> toRemove = Arrays.asList("B", "D");
list.removeAll(toRemove); // 刪除所有"B"和"D"
System.out.println(list); // [A, C]
4. boolean retainAll(Collection<?> c)
  • 功能:保留List中所有包含在集合c中的元素(即刪除不在c中的元素,求交集)。
  • 返回值:若List因保留而改變則返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> toRetain = Arrays.asList("B", "C");
list.retainAll(toRetain); // 只保留"B"和"C"
System.out.println(list); // [B, C]
5. void clear()
  • 功能:清空List中所有元素(size變為0,但對象本身仍可使用)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
list.clear();
System.out.println(list.size()); // 0
System.out.println(list); // []

三、獲取與修改元素(查、改)

通過索引獲取元素,或修改指定位置的元素。

1. E get(int index)
  • 功能:返回指定索引index處的元素。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String element = list.get(2); // 獲取索引2的元素
System.out.println(element); // C
2. E set(int index, E element)
  • 功能:用element替換指定索引index處的元素,返回被替換的舊元素。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String old = list.set(1, "X"); // 替換索引1的元素為"X"
System.out.println(old); // B
System.out.println(list); // [A, X, C]

四、判斷與查詢(判斷狀態、查找元素)

判斷元素是否存在、獲取元素索引等。

1. boolean contains(Object o)
  • 功能:判斷List中是否包含元素o(通過equals()判斷,null==)。
  • 示例
List<String> list = Arrays.asList("A", "B", "C");
boolean hasB = list.contains("B"); // true
boolean hasX = list.contains("X"); // false
2. int indexOf(Object o)
  • 功能:返回元素o在List中首次出現的索引;若不存在,返回-1
  • 示例
List<String> list = Arrays.asList("A", "B", "A");
int firstA = list.indexOf("A"); // 0(首次出現的索引)
int xIndex = list.indexOf("X"); // -1
3. int lastIndexOf(Object o)
  • 功能:返回元素o在List中最后出現的索引;若不存在,返回-1
  • 示例
List<String> list = Arrays.asList("A", "B", "A");
int lastA = list.lastIndexOf("A"); // 2(最后出現的索引)
4. boolean isEmpty()
  • 功能:判斷List是否為空(size == 0)。
  • 示例
List<String> list = new ArrayList<>();
boolean empty = list.isEmpty(); // true(剛創建的List為空)
list.add("A");
empty = list.isEmpty(); // false
5. int size()
  • 功能:返回List中元素的數量。
  • 示例
List<String> list = Arrays.asList("A", "B", "C");
int size = list.size(); // 3

五、迭代器(遍歷元素)

List支持多種遍歷方式,其中迭代器是安全修改元素的方式。

1. Iterator<E> iterator()
  • 功能:返回普通迭代器,支持單向遍歷(hasNext()next())和刪除(remove())。
  • 注意:遍歷中修改List結構(如add/remove)需用迭代器的remove(),否則拋ConcurrentModificationException
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String elem = iterator.next();if (elem.equals("B")) {iterator.remove(); // 安全刪除當前元素}
}
System.out.println(list); // [A, C]
2. ListIterator<E> listIterator()
  • 功能:返回List特有的迭代器,支持雙向遍歷hasPrevious()previous())、添加(add(E e))、修改(set(E e))等。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
ListIterator<String> listIt = list.listIterator();// 正向遍歷
while (listIt.hasNext()) {System.out.print(listIt.next() + " "); // A B C
}// 反向遍歷(需先正向遍歷到末尾)
while (listIt.hasPrevious()) {System.out.print(listIt.previous() + " "); // C B A
}// 在當前位置添加元素(反向遍歷到開頭后,添加在最前面)
listIt.add("X");
System.out.println(list); // [X, A, B, C]

六、排序與反轉

通過工具類或自身方法調整元素順序。

1. void sort(Comparator<? super E> c)(Java 8+)
  • 功能:根據比較器c對List進行排序(ArrayListLinkedList均實現)。
  • 示例
List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 2));
// 自然排序(從小到大)
numbers.sort(Comparator.naturalOrder()); 
System.out.println(numbers); // [1, 2, 3]// 自定義排序(從大到小)
numbers.sort(Comparator.reverseOrder());
System.out.println(numbers); // [3, 2, 1]
2. static void reverse(List<?> list)Collections工具類)
  • 功能:反轉List中元素的順序。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Collections.reverse(list); // 反轉元素
System.out.println(list); // [C, B, A]

七、其他常用方法

1. List<E> subList(int fromIndex, int toIndex)
  • 功能:返回List中從fromIndex(包含)到toIndex(不包含)的子列表視圖(非新集合,修改子列表會影響原List,反之亦然)。
  • 注意fromIndextoIndex需滿足0 ≤ fromIndex ≤ toIndex ≤ size(),否則拋異常。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> sub = list.subList(1, 3); // 索引1(含)到3(不含)
System.out.println(sub); // [B, C]// 修改子列表,原List也會變化
sub.set(0, "X");
System.out.println(list); // [A, X, C, D]
2. Object[] toArray()T[] toArray(T[] a)
  • 功能:將List轉換為數組(詳見「數組與List相互轉換」專題)。
  • 示例
List<String> list = Arrays.asList("A", "B");
String[] array = list.toArray(new String[0]); // 轉換為String數組
System.out.println(Arrays.toString(array)); // [A, B]

八、注意事項

  1. 并發修改異常:使用增強for循環(for-each)遍歷List時,若同時調用add/remove(非迭代器方法),會拋ConcurrentModificationException,需用IteratorListIterator的修改方法。
  2. 實現類選擇
    • 需頻繁隨機訪問(get):選ArrayList(數組實現,時間復雜度O(1))。
    • 需頻繁在首尾增刪(add(0, e)remove(0)):選LinkedList(鏈表實現,時間復雜度O(1))。
  3. null元素處理:List允許nullcontains(null)indexOf(null)等方法可正常處理(用==判斷)。

通過上述API,可完成List的大部分操作。實際開發中,需根據業務場景(如增刪頻率、訪問方式)選擇合適的實現類,并注意遍歷中的并發修改問題。

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

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

相關文章

Azure AI Search 探索總結

Azure AI Search 原名 Azure Cognitive Service&#xff0c;是Azure中用來給AI項目構建知識庫的組件。知識庫本質和數據庫很像&#xff0c;但是內部的存儲結構和檢索算法不一樣。比如并不是知識庫的每一列都可以用來過濾、檢索或group by&#xff0c;而是要根據實際情況配置。A…

高效解決 pip install 報錯 SSLError: EOF occurred in violation of protocol

高效解決 pip install 報錯 SSLError: EOF occurred in violation of protocol 標簽&#xff1a; Python, pip, SSLError, Clash, 網絡代理, 問題解決 一、問題描述 在Python開發中&#xff0c;pip 是我們最親密的伙伴。然而&#xff0c;當你身處需要科學上網的環境&#xff0c…

CSS 核心知識點全解析:從基礎到實戰應用

大家好&#xff01;今天這篇文章將系統總結 CSS 的核心知識點&#xff0c;從最基礎的樣式引入到復雜的選擇器應用&#xff0c;再到盒子模型、文本處理等實戰技巧&#xff0c;全程結合代碼示例&#xff0c;讓你輕松掌握 CSS 的精髓。一、CSS 是什么&#xff1f;為什么需要它&…

ClickHouse的學習與了解

什么是ClickHouse&#xff1f; ClickHouse是一個用于聯機分析(OLAP)的列式數據庫管理系統(DBMS)。 在傳統的行式數據庫系統中&#xff0c;數據按如下順序存儲&#xff1a;RowWatchIDJavaEnableTitleGoodEventEventTime#0893543506621Investor Relations12016/5/18 5:19#1903295…

安卓11 12系統修改定制化_____修改系統 解鎖system分區 去除data加密 自由刪減系統應用

在定制化系統中。修改系統分區 解鎖system。讓用戶可以自由刪減應用。這個在定制化服務中比較常見。對于此項修改服務。需要我們了解基礎的分區常識以及常用的幾種基礎修改步驟。 通過博文了解?????? 1??????-----修改rom 解鎖 system 分區有什么意義 2????…

JetPack系列教程(八):PDF庫——讓Android應用也能優雅“翻頁”

JetPack系列教程&#xff08;八&#xff09;&#xff1a;PDF庫——讓Android應用也能優雅“翻頁” 在Android開發的世界里&#xff0c;加載PDF文件一直是個讓人又愛又恨的“小妖精”。愛它&#xff0c;因為PDF是文檔界的“萬能鑰匙”&#xff1b;恨它&#xff0c;因為原生Andr…

Three.js三大組件:場景(Scene)、相機(Camera)、渲染器(Renderer)

上一篇中我們學習了第一個Three.js場景"Hello World"。這一篇就來學習three.js的核心組件。 此圖來源&#xff08;Three.js中文網&#xff09; three.js的核心由三大組件構成&#xff1a;場景(Scene)、相機(Camera)和渲染器(Renderer)。下面我將詳細介紹這三大件的作…

AI幻覺終結之后:GPT-5開啟的“可靠性”新賽道與開發者生存指南

摘要&#xff1a; Sam Altman關于GPT-5將基本終結幻覺的宣告&#xff0c;不僅僅是一次技術升級&#xff0c;它標志著一個“萬物皆可AI&#xff0c;但萬事皆需驗證”的混亂時代的結束。本文將從一個全新的戰略視角出發&#xff0c;探討當“可靠性”取代“創造性”成為AI競賽的核…

ubuntu遠程桌面很卡怎么解決?

服務端方案 完成XRDP的性能優化配置&#xff1a; 1. 首先檢查當前的xrdp.ini文件 grep -n "tcp_send_buffer_bytes" /etc/xrdp/xrdp.ini2. 編輯xrdp.ini文件&#xff0c;修改TCP發送緩沖區大小 sudo sed -i s/#tcp_send_buffer_bytes32768/tcp_send_buffer_bytes4194…

[Linux] Linux系統負載監控 Linux服務管理

目錄 Linux系統負載監控 系統負載介紹 查看系統負載 負載解讀 top 命令 Linux服務管理 systemd 介紹 系統啟動管理進程 基本概念 systemd 架構 unit 類型 查看 unit 列表信息 查看單個 unit 信息 控制系統服務 systemctl 命令 unit 配置文件 例&#xff1a;開發…

vector 手動實現 及遇到的各種細節問題

之前對vector的一些功能使用了一下 接下來手動實現一下vector vector的實現和string還是有不小區別的 有很多地方都有細節的問題不同于string的成員變量一個指針一個size一個capacity的成員變量 vector里面存的是三個迭代器iterator 這的迭代器其實就是模版T的指針 這樣就…

OpenStack Neutron中的L2 Agent與L3 Agent:新手友好指南

引言&#xff1a;云網絡的幕后英雄 在當今的云計算世界中&#xff0c;OpenStack作為開源云平臺的佼佼者&#xff0c;為成千上萬的企業提供了靈活、可擴展的基礎設施服務。而在OpenStack的眾多組件中&#xff0c;Neutron&#xff08;網絡服務&#xff09;扮演著至關重要的角色—…

【自用】JavaSE--特殊文件Properties與XML、日志技術

特殊文件概述使用特殊文件可以存儲多個有關系的數據&#xff0c;作為系統的配置信息屬性文件類似于鍵值對&#xff0c;一一對應存儲數據(比如用戶名與密碼)XML文件存儲多個用戶的多個屬性更適合&#xff0c;適合存儲更復雜的數據Properties注&#xff1a;這個屬性文件的后綴即使…

中本聰思想與Web3的困境:從理論到現實的跨越

一、中本聰思想的核心精髓中本聰通過比特幣白皮書提出的核心思想&#xff0c;可歸納為三大支柱&#xff1a;去中心化貨幣體系目標&#xff1a;擺脫中央機構控制&#xff0c;避免通貨膨脹和政治干預&#xff08;如2008年金融危機暴露的中心化風險&#xff09;。實現路徑&#xf…

Centos 用戶管理

一.創建用戶 在 root賬戶 或 sudo 權限下 1. 創建用戶 useradd xiaoyangzi2.為該用戶設置密碼或修改密碼 passwd xiaoyangzi3. 將用戶加入wheel用戶組 在 CentOS 中&#xff0c;屬于 wheel 組的用戶默認可以使用 sudo 權限。 查看所屬用戶組: groups xiaoyangzi將 xiaoyangzi 加…

C++枚舉算法習題

1. 3的倍數枚舉&#xff08;基礎&#xff09;題目&#xff1a;在之間有10和50多少個數是3的倍數&#xff1f;列舉這些數。 解析&#xff1a;枚舉10到50之間的數&#xff0c;判斷是否能被3整除。優化&#xff1a;計算第一個≥10的3的倍數&#xff08;1234&#xff09;&#xff0…

【SpringBoot系列-01】Spring Boot 啟動原理深度解析

【SpringBoot系列-01】Spring Boot 啟動原理深度解析 大家好&#xff01;今天咱們來好好聊聊Spring Boot的啟動原理。估計不少人跟我一樣&#xff0c;剛開始用Spring Boot的時候覺得這玩意兒真神奇&#xff0c;一個main方法跑起來就啥都有了。但時間長了總會好奇&#xff1a;這…

windows環境下使用vscode以及相關插件搭建c/c++的編譯,調試環境

windows下使用vscode搭建c/c的編譯、運行、調試環境&#xff0c;需要注意的是生成的是xxx.exe可執行文件。另外使用的編譯器是mingw&#xff0c;也就是windows環境下的GNU。 我參考的網址是&#xff1a;https://zhuanlan.zhihu.com/p/1936443912806962622 文章分為2種環境搭建…

標準瓦片層級0~20,在EPSG:4326坐標系下,每個像素點代表的度數

在 EPSG:4326&#xff08;WGS84經緯度坐標系&#xff09; 下&#xff0c;瓦片層級&#xff08;Zoom Level&#xff09;的分辨率以 度/像素 為單位&#xff0c;其計算遵循 TMS Global Geodetic 規范&#xff08;單位&#xff1a;度&#xff09;。以下是 標準層級 0 至 20 的分辨…

Unity高級剔除技術全解析

目錄 ?編輯層級剔除&#xff08;Layer Culling&#xff09;原理詳解 代碼示例 業務應用場景 距離剔除&#xff08;Distance Culling&#xff09;技術細節 進階實現 開放世界優化技巧 視口裁剪&#xff08;Viewport Culling&#xff09;多攝像機協作方案 高級應用場景 …