Java ArrayList的介紹及用法

十分想念順店雜可。。。

ArrayList?是 Java 集合框架中最常用的類之一,實現了?List?接口,底層基于動態數組實現,支持動態擴容,相比普通數組更靈活。以下是其詳細介紹及用法:

一、核心特性

  1. 動態大小:無需預先指定容量,可自動擴容(初始容量為 10,滿后擴容為原容量的 1.5 倍)。
  2. 允許重復元素:可存儲多個相同值的元素。
  3. 有序集合:元素按插入順序排列,支持通過索引訪問。
  4. 非線程安全:多線程環境下并發修改可能導致異常(需手動同步或使用?CopyOnWriteArrayList)。
  5. 存儲引用類型:只能存儲對象(基本類型需用包裝類,如?Integer?而非?int)。

二、基本用法(代碼示例)

1. 引入包與創建對象

ArrayList?位于?java.util?包,需先導入,創建時需指定泛型(元素類型):

import java.util.ArrayList;
import java.util.List;public class ArrayListDemo {public static void main(String[] args) {// 創建存儲String類型的ArrayList(推薦聲明為List接口)List<String> list = new ArrayList<>();// 可指定初始容量(減少擴容次數,優化性能)List<Integer> numList = new ArrayList<>(20); // 初始容量20}
}
2. 常用方法
(1)添加元素:add()
List<String> list = new ArrayList<>();
list.add("Java"); // 末尾添加元素 → [Java]
list.add(0, "Python"); // 指定索引插入 → [Python, Java](索引需≤當前size)
list.addAll(List.of("C", "C++")); // 批量添加 → [Python, Java, C, C++]
(2)訪問元素:get()

通過索引獲取元素(索引從 0 開始,需注意?IndexOutOfBoundsException):

String first = list.get(0); // 獲取第1個元素 → "Python"
int size = list.size(); // 獲取元素個數 → 4
(3)修改元素:set()

替換指定索引的元素,返回被替換的舊值:

String old = list.set(1, "JavaScript"); // 替換索引1的元素 → 舊值"Java"
// 此時list為 [Python, JavaScript, C, C++]
(4)刪除元素:remove()
String removed = list.remove(2); // 移除索引2的元素 → 返回"C",list變為 [Python, JavaScript, C++]
boolean isRemoved = list.remove("C++"); // 移除指定值的元素 → 返回true,list變為 [Python, JavaScript]
(5)判斷與查找
boolean isEmpty = list.isEmpty(); // 判斷是否為空 → false
boolean contains = list.contains("Python"); // 是否包含指定元素 → true
int index = list.indexOf("JavaScript"); // 首次出現的索引 → 1
int lastIndex = list.lastIndexOf("Python"); // 最后出現的索引 → 0(元素唯一時與indexOf相同)
(6)清空與截取
list.clear(); // 清空所有元素 → list變為空
List<String> subList = list.subList(0, 2); // 截取子列表(從索引0到2,不含2)→ [Python, JavaScript]
3. 遍歷方式
(1)普通 for 循環(通過索引)
for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));
}
(2)增強 for 循環(foreach)
for (String element : list) {System.out.println(element);
}
(3)迭代器(Iterator

支持在遍歷中安全刪除元素:

import java.util.Iterator;Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String element = iterator.next();if (element.equals("Python")) {iterator.remove(); // 安全刪除當前元素}
}
(4)Java 8+ 流(Stream)
list.stream().forEach(System.out::println); // 簡化遍歷

三、注意事項

  1. 擴容機制:當元素數量超過當前容量時,ArrayList 會自動擴容為原容量的 1.5 倍(通過?Arrays.copyOf()?復制數組)。若預知元素數量,創建時指定初始容量可減少擴容次數(提升性能)。

  2. 與數組的轉換

    // ArrayList → 數組
    String[] arr = list.toArray(new String[0]); // 推薦傳遞類型數組,避免強制轉換// 數組 → ArrayList(注意:返回的是固定大小的List,不能添加/刪除元素)
    List<String> fixedList = Arrays.asList(arr); 
    // 若需可變List,需再包裝一次:
    List<String> mutableList = new ArrayList<>(Arrays.asList(arr));
    

  3. 與 LinkedList 的對比

    • ArrayList?基于數組,隨機訪問快get(index)?時間復雜度 O (1)),增刪中間元素慢(需移動元素,O (n))。
    • LinkedList?基于鏈表,增刪中間元素快(O(1)),隨機訪問慢(O(n))。
    • 頻繁查改選?ArrayList,頻繁增刪中間元素選?LinkedList
  4. 線程安全:多線程環境下,可使用?Collections.synchronizedList()?包裝:

    List<String> safeList = Collections.synchronizedList(new ArrayList<>());
    

四、總結

ArrayList?是日常開發中最常用的 List 實現,以動態數組為核心,兼顧靈活性與訪問效率,適合大多數場景。掌握其?add()get()remove()?等方法及遍歷方式,結合擴容機制和線程安全特性,可更高效地使用。

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

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

相關文章

Docker 命令大全及使用場景總結

一、容器生命周期管理1. 創建并運行容器docker run [選項] 鏡像名 [命令]常用選項&#xff1a;-d&#xff1a;后臺運行&#xff08;detached&#xff09;-it&#xff1a;交互式終端&#xff08;如 -it ubuntu bash&#xff09;--name&#xff1a;指定容器名稱-p 主機端口:容器端…

簡單的 HTTPS 學習

簡單的 HTTPS 學習 1. 需求 現在使用的服務是HTTP調用形式&#xff0c;服務可能會有調用外圍https形式的服務&#xff0c;簡單了解了一下&#xff0c;然后寫了一個簡單的例子進行記錄。 HTTP&#xff08;超文本傳輸協議&#xff09; 是一種用于傳輸超文本的應用層協議&#…

[系統架構設計師]系統質量屬性與架構評估(八)

[系統架構設計師]系統質量屬性與架構評估&#xff08;八&#xff09; 一.軟件系統質量屬性 1.基本概念 軟件系統質量屬性&#xff1a;可測量或可測試的屬性 開發期質量屬性&#xff0c;運行期質量屬性面向架構評估的質量屬性&#xff1a;1.可用性&#xff1a; 提升策略 錯誤檢測…

【R語言】R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例)

R 語言中 gsub 與正則表達式詳解&#xff08;含 POSIX 與 Perl 風格實例&#xff09; 在 R 語言中&#xff0c;字符串處理是非常常見的需求&#xff0c;R 語言中的 gsub() 函數則具有字符串替換的功能。本文將通過兩個實例&#xff0c;幫助你深入理解 R 的 gsub()、POSIX 字符…

EN55035多媒體設備電磁兼容性抗干擾要求標準

EN55035 是一項由歐洲標準化委員會制定的電磁兼容性&#xff08;EMC&#xff09;標準&#xff0c;全稱為《多媒體設備的電磁兼容性要求》。該標準主要針對多媒體設備的電磁輻射和抗干擾能力進行規范&#xff0c;確保這類設備在電磁環境中能夠正常工作&#xff0c;同時不對其他設…

計算分組內時間列的最大差值

計算分組內時間列的最大差值 在 Pandas 中&#xff0c;要計算每個分組內 time 列的最大值與當前行值的差值&#xff0c;需結合 groupby() 和 transform() 方法。核心步驟如下&#xff1a;分組計算最大值 使用 transform(max) 獲取每個分組中 time 列的最大值&#xff0c;結果會…

CUDA 編程筆記:CUDA延遲隱藏

一、核心概念&#xff1a;延遲隱藏&#xff08;Latency Hiding&#xff09;是 GPU 通過多線程機制掩蓋指令延遲的關鍵技術。當某些線程束&#xff08;warp&#xff09;因指令延遲&#xff08;如內存訪問或算術計算&#xff09;而等待時&#xff0c;其他就緒線程束會立即被調度執…

MySQL工具包中的其他程序

雖然有很多不同的程序&#xff0c;但有些選項是公共的&#xff0c;比兔用戶名和密碼&#xff0c;使用方法和MySQL相同&#xff0c;在這里統一列出&#xff0c;后面我們介紹不同的工具時&#xff0c;只討論個性的選項以及作用以下是常用的MySQL程序&#xff1a;程序名作用mysqld…

C#WPF實戰出真汁09--【消費開單】--選擇菜品

1、功能介紹當選擇一個空桌時&#xff0c;必須先開臺才能開單&#xff0c;可以先開臺&#xff0c;再開單&#xff0c;也可以開臺的同時開單當選擇一個用餐中的餐桌時&#xff0c;必須顯示該桌前面已經點好的菜品&#xff0c;同時可以繼續點餐或結賬所以無論哪個功能都涉及選擇菜…

大廠語音合成成本深度對比:微軟 / 阿里 / 騰訊 / 火山 API 計費拆解與技術選型指南

在 AI 配音、智能客服、教育音頻等場景爆發的當下&#xff0c;語音合成 API 已成為企業技術棧中的核心組件。然而&#xff0c;不同云廠商的計費規則差異顯著&#xff0c;短文本 / 長文本計費分離、預付費 / 后付費價格梯度懸殊、音色授權費暗藏成本陷阱等問題&#xff0c;常導致…

Flutter開發 網絡請求

HttpClient&#xff08;dart自有&#xff09; 1.get 點擊請求按鈕獲取數據&#xff0c;解析數據獲取單詞展示到屏幕上。class MyState extends State {String info "暫無數據";List<Widget> texts [];overridevoid initState() {super.initState();}override…

vscode中用python調用matlab的函數(環境安裝)

本實踐適用于WIN11-x64和ubuntu22.04-x64系統&#xff0c;其余系統和架構未驗證。 效果展示 1.環境要求 MATLAB Engine API for Python 的系統要求&#xff1a;參閱此官方文檔MATLAB 與 Python 的版本兼容性&#xff1a;參閱此官方文檔 2.安裝步驟 安裝Vscode&#xff08;不…

【數據分享】大清河(大慶河)流域上游土地利用

而今天要說明數據就是大清河&#xff08;大慶河&#xff09;流域上游土地利用。數據介紹大清河&#xff0c;又稱大慶河&#xff0c;作為海河流域的重要支流&#xff0c;其流域上游地區不僅是區域水資源調控的關鍵節點&#xff0c;更是生態保護與經濟發展的重要載體。以下從地理…

圖論——Djikstra最短路

原理解釋 首先解釋一下它大概的應用場景以及原理&#xff1a;現在有這么一張圖&#xff0c;圖上各點之間都有一定的邊權或者說是距離。給定你一個起點&#xff08;例如點1&#xff09;&#xff0c;讓你求這個點到圖上所有點的最短距離是多少&#xff1f; 這個問題比較平常&…

kafka初步介紹

Kafka角色介紹TopicTopic主題的意思&#xff0c;消費者必須指定主題用于的消息發送&#xff0c;生產者也必須指定主題用于消息的接收。topic只是邏輯上的劃分。partitionpartition是分區的意思&#xff0c;他的主要作用是將發送到一個topic的數據做一個劃分。如果有4個partitio…

windows10的vs2019編譯openssl靜態庫備忘

1、下載安裝openssl源碼2、官網下載安裝activeperl或Strawberry Perl。官網下載慢&#xff0c;網盤找找。使用中activeperl有些異常提示、缺模塊&#xff0c;最后使用了Strawberry Perl。3、安裝nasm。powershell使用choco install nasm -y 即可。powershell使用cd命令打開當前…

學習筆記與效率提升指南:編程、記憶與面試備考

在學習與工作中&#xff0c;高效的記錄習慣、針對性的記憶方法和實用的技能儲備&#xff0c;是提升效率的關鍵。本文結合編程學習、面試備考和英語單詞積累&#xff0c;整理一套可落地的學習思路&#xff0c;尤其適合編程初學者。 一、學習核心原則&#xff1a;高效優先&#x…

順豐面試題

1. 你擅長處理哪類問題推薦回答&#xff1a; "我比較擅長處理以下幾類前端問題&#xff1a;性能優化&#xff1a;包括加載優化&#xff08;代碼分割、懶加載&#xff09;、運行時優化&#xff08;減少重排重繪&#xff09;等復雜組件開發&#xff1a;如表單聯動、可視化圖…

Warmup_steps 設置經驗

文章目錄什么是 Warmup&#xff1f;實現示例科學設置 Warmup 的黃金法則直觀例子什么是 Warmup&#xff1f; Warmup 是一種學習率調度策略&#xff0c;在訓練初期逐步增加學習率&#xff08;LR&#xff09;&#xff0c;而不是直接使用目標學習率。它解決了兩個關鍵問題&#x…

vue一個超簡單的菜單欄伸縮示例

代碼<template><div class"container"><!-- 左側區域 --><div class"left-side" :style"{ width: leftWidth px }">左側內容</div><!-- 右側區域 --><div class"right-side" :style"{ l…