Java的ArrayList中關于刪除的常用操作及方法

目錄

remove(int index)方法

remove(Object o)方法

removeAll?(Collection c)方法

removeIf?(Predicate filter)方法

removeRange?(int fromIndex, int toIndex)方法


remove(int index)方法

remove(int index)是ArrayList類中用于刪除指定位置元素的方法。它接收一個整型參數index,表示要刪除的元素在列表中的索引位置。該方法會刪除列表中索引為index的元素,并將其后面的元素往前移動一位,填補被刪除的元素位置。返回值是被刪除的元素。

具體實現中,ArrayList內部使用數組來存儲元素,因此刪除元素時需要將被刪除元素之后的所有元素都向前移動一位,以保證數組不出現空洞。

下面是一個簡單的示例,演示了如何使用ArrayList的remove(int index)方法來刪除指定位置的元素:?

import java.util.ArrayList;public class Main {public static void main(String[] args) {// 創建一個ArrayList并添加一些元素ArrayList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");list.add("Grape");System.out.println("原始列表:" + list);// 刪除索引為1的元素(即第二個元素)String removedElement = list.remove(1);System.out.println("刪除的元素是:" + removedElement);System.out.println("操作后的列表:" + list);}
}

上述示例創建了一個ArrayList,并向其中添加了一些水果。然后使用remove(int index)方法刪除了索引為1的元素(即第二個元素),并打印出被刪除的元素以及操作后的列表。

運行該示例,將會輸出以下結果:

原始列表:[Apple, Banana, Orange, Grape]
刪除的元素是:Banana
操作后的列表:[Apple, Orange, Grape]

remove(Object o)方法

remove(Object o)是ArrayList類中的方法,用于從列表中刪除第一個匹配到的指定元素。它接收一個參數o,表示要刪除的元素對象。該方法會遍歷列表,找到與參數o相等的第一個元素,并將其從列表中刪除。

具體實現中,ArrayList內部使用數組來存儲元素。當調用remove(Object o)方法時,它會依次比較列表中的每個元素與參數o的相等性。如果找到匹配項,則刪除該元素,并將后面的元素向前移動一位來填補被刪除的位置。返回值是一個布爾值,表示是否成功刪除了元素。

import java.util.ArrayList;public class Main {public static void main(String[] args) {// 創建一個ArrayList并添加一些元素ArrayList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");list.add("Grape");list.add("Banana");System.out.println("原始列表:" + list);// 刪除指定的元素boolean isRemoved = list.remove("Banana");if (isRemoved) {System.out.println("刪除成功!");} else {System.out.println("刪除失敗!");}System.out.println("操作后的列表:" + list);}
}

上述示例創建了一個ArrayList,并向其中添加了一些水果。然后使用remove(Object o)方法刪除了指定的元素(這里是"Banana"),并根據返回值判斷是否刪除成功。

運行該示例,將會輸出以下結果:

原始列表:[Apple, Banana, Orange, Grape, Banana]
刪除成功!
操作后的列表:[Apple, Orange, Grape, Banana]

removeAll?(Collection<?> c)方法

removeAll(Collection<?> c)是ArrayList類中的方法,用于從列表中刪除所有與指定集合中包含的元素相等的元素。它接收一個參數c,表示要刪除的元素集合。該方法會遍歷列表,并刪除與集合c中包含的元素相等的所有元素。

具體實現中,ArrayList內部使用數組來存儲元素。當調用removeAll(Collection<?> c)方法時,它會遍歷列表中的每個元素,并將其與集合c中的每個元素進行比較。如果找到匹配項,則刪除列表中的該元素,并將后面的元素向前移動一位來填補被刪除的位置。返回值是一個布爾值,表示是否成功刪除了元素。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Main {public static void main(String[] args) {// 創建一個ArrayList并添加一些元素List<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange", "Grape", "Banana"));// 創建一個要刪除的集合List<String> list2 = new ArrayList<>(Arrays.asList("Banana", "Orange"));System.out.println("原始列表:" + list1);// 刪除與list2中包含的元素相等的所有元素boolean isModified = list1.removeAll(list2);if (isModified) {System.out.println("刪除成功!");} else {System.out.println("刪除失敗!");}System.out.println("操作后的列表:" + list1);}
}

在上述示例中,我們首先創建了一個ArrayList list1,并向其中添加了一些水果。然后,我們創建了另一個ArrayList list2,其中包含要從 list1 中刪除的元素。接下來,我們調用 list1.removeAll(list2) 方法,它會刪除 list1 中所有與 list2 中包含的元素相等的元素。

運行該示例,將會輸出以下結果:

原始列表:[Apple, Banana, Orange, Grape, Banana]
刪除成功!
操作后的列表:[Apple, Grape]

removeIf?(Predicate<? super E> filter)方法

removeIf(Predicate<? super E> filter)是List接口中的一個默認方法,用于根據給定的條件(Predicate)刪除列表中滿足條件的元素。它接收一個參數filter,表示要應用的條件。

具體實現中,removeIf(Predicate<? super E> filter)方法會遍歷列表中的每個元素,并使用給定的條件(Predicate)對元素進行判斷。如果判斷結果為true,則刪除該元素。返回值是一個布爾值,表示是否成功刪除了元素。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;public class Main {public static void main(String[] args) {// 創建一個ArrayList并添加一些元素List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange", "Grape"));System.out.println("原始列表:" + list);// 刪除長度小于6的元素Predicate<String> condition = str -> str.length() < 6;list.removeIf(condition);System.out.println("操作后的列表:" + list);}
}

在上述示例中,我們首先創建了一個ArrayList list,并向其中添加了一些水果。然后,我們定義了一個謂詞(Predicate)condition,它用于篩選要刪除的元素。具體來說,該謂詞會判斷字符串的長度是否小于6。

接下來,我們調用 list.removeIf(condition) 方法,它會刪除滿足條件的所有元素。

運行該示例,將會輸出以下結果:

原始列表:[Apple, Banana, Orange, Grape]
操作后的列表:[Banana, Orange]

removeRange?(int fromIndex, int toIndex)方法

removeRange(int fromIndex, int toIndex)方法是ArrayList類的一個受保護方法,用于刪除列表中指定范圍內的元素。該方法接受兩個參數:fromIndex表示要刪除范圍的起始索引(包括),toIndex表示要刪除范圍的結束索引(不包括)。

需要注意的是,removeRange(int fromIndex, int toIndex)方法是ArrayList類中的受保護方法,意味著它只能在ArrayList的子類中訪問和使用。這是為了避免直接暴露刪除范圍的操作,因為在刪除范圍后,列表的內部結構可能會發生不連續或混亂的變化。

import java.util.ArrayList;
import java.util.Arrays;public class Main<E> extends ArrayList<E> {public void removeElementsInRange(int fromIndex, int toIndex) {if (fromIndex < 0 || toIndex > size() || fromIndex > toIndex) {throw new IndexOutOfBoundsException();}removeRange(fromIndex, toIndex);}public static void main(String[] args) {// 創建一個CustomArrayList并添加一些元素Main<String> list = new Main<>();list.addAll(Arrays.asList("Apple", "Banana", "Orange", "Grape"));System.out.println("原始列表:" + list);// 刪除索引為1到3之間的元素(不包括3)list.removeElementsInRange(1, 3);System.out.println("操作后的列表:" + list);}
}

在這個示例中,我們創建了一個自定義的ArrayList子類Main,它繼承了ArrayList,并添加了一個新的方法removeElementsInRange(int fromIndex, int toIndex)。在該方法內部,我們首先進行參數的合法性檢查,確保起始索引和結束索引在有效范圍內。然后,我們調用removeRange(fromIndex, toIndex)方法來實際刪除指定范圍內的元素。

運行該示例,將會輸出以下結果:

原始列表:[Apple, Banana, Orange, Grape]
操作后的列表:[Apple, Grape]

需要注意的是,盡管我們可以在子類中使用removeRange(int fromIndex, int toIndex)方法,但在一般情況下,推薦使用更高級別的方法,如removeAll(Collection<?> c)或removeIf(Predicate<? super E> filter)來刪除元素。這些方法更易于使用,并提供了更靈活的條件判斷,以滿足不同的需求。

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

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

相關文章

小程序Canvas 2D問題解決,如安卓drawImage不執行、動態高度設置、高度1365(或4096)限制等

我的最新版小程序想在繪制時使用自定義字體&#xff0c;需要將舊版canvas升級到2d新版&#xff0c;發現了許多問題&#xff0c;下面記錄一下并提供解決思路&#xff0c;僅供參考&#xff0c;歡迎提供新思路。 一、開發工具和安卓上drawImage不執行&#xff0c;繪制出來是空白&…

聊聊tomcat的connection-timeout

序 本文主要研究一下tomcat的connection-timeout ServerProperties.Tomcat org/springframework/boot/autoconfigure/web/ServerProperties.java public static class Tomcat {/*** Access log configuration.*/private final Accesslog accesslog new Accesslog();/*** Th…

github批量倉庫克隆,git clone某個用戶的所有倉庫

利用github的api工具&#xff0c; 首先拿到用戶名為kevin的所有倉庫的url&#xff1a; curl "https://api.github.com/users/kevin/repos?per_page100&&page1" | grep -w clone_url >clone.txt過濾一下&#xff1a; grep -o https://[^"]* clone…

DM8單點_閃回查詢報錯flashback version has been out of date

問題描述 誤操作后&#xff0c;閃回查詢到某一時間點提示:“[-9801]:flashback version has been out of date.” SQL> SELECT * FROM PERSON_TYPE WHEN TIMESTAMP 2023-11-23 18:51:41; SELECT * FROM PERSON_TYPE WHEN TIMESTAMP 2023-11-23 18:51:41; [-9801]:flashbac…

redis運維(十九)redis 的擴展應用 lua(一)

一 redis 的擴展應用 lua redis如何保證原子操作 說明&#xff1a;引入lua腳本,核心解決原子性問題 ① redis為什么引入lua? lua腳本本身體積小,啟動速度快 ② redis引入lua的優勢 小結&#xff1a; 類似自定義redis命令 ③ redis中如何使用lua ④ EVAL 說明&#…

性能測試的指南:測試類型、性能測試步驟、最佳實踐等!

近期公司為了節省成本搞了一波機房遷移&#xff0c;整合了一些南美部署架構。有一些上google云和有些下阿里云等大的調整。 在做機房遷移項目當中就需要思考如何進行性能測試&#xff0c;這種大的機房遷移SRE&#xff08;運維&#xff09;會針對組件會做一些單組件的性能測試&a…

【深度學習】參數優化和訓練技巧

尋找合適的學習率(learning rate) 學習率是一個非常非常重要的超參數&#xff0c;這個參數呢&#xff0c;面對不同規模、不同batch-size、不同優化方式、不同數據集&#xff0c;其最合適的值都是不確定的&#xff0c;我們無法光憑經驗來準確地確定lr的值&#xff0c;我們唯一可…

6.2.SDP協議

那今天呢&#xff1f;我們來介紹一下sdp協議&#xff0c;那實際上呢&#xff1f;sdp協議非常的簡單。我們如果拿到一個stp的文檔去看的話&#xff0c;那你要分閱里邊的所有的內容會覺得很枯燥&#xff0c;但實際上呢&#xff0c;如果我們按照這張圖所展示的結構去看stp的話。你…

Javascript每天一道算法題(十四)——合并數組區間_中等

文章目錄 1、問題2、示例3、解決方法&#xff08;0&#xff09;方法0——雙指針&#xff08;錯誤思路&#xff09;&#xff08;1&#xff09;方法1——雙指針&#xff08;正確&#xff09; 總結 1、問題 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 inte…

怎么讀一個網絡的代碼

1.網絡代碼怎么來的&#xff1f; 我想要實現一個功能&#xff0c;這個功能是輸入一張圖像&#xff0c;返回一個類別結果。 所以很明確就有三個部分&#xff0c;一個是接受圖像輸入&#xff0c;一個是處理圖像得到處理結果&#xff0c;一個是對處理結果判斷生成結果。 現在想要使…

rocketmq 發送時異常:system busy 和 broker busy 解決方案

之前寫的解決方案,都是基于測試環境測試的.到生產環境之后,正常使用沒有問題,生產環境壓測時,又出現了system busy異常(簡直崩潰).最后在rocketmq群里大佬指導下,終于解決(希望是徹底解決). 下面直接給出結果: 目前通過生產環境各種參數修改測試得出: broker busy異常: 可通…

Using PeopleCode in Application Engine Programs在應用引擎程序中使用PeopleCode

This section provides an overview of PeopleCode and Application Engine programs and discusses how to: 本節概述了PeopleCode和應用程序引擎程序&#xff0c;并討論了如何: Decide when to use PeopleCode.決定何時使用PeopleCode。Consider the program environment.考…

Java之《ATM自動取款機》(面向對象)

《JAVA編程基礎》項目說明 一、項目名稱&#xff1a; 基于JAVA控制臺版本銀行自動取款機 項目要求&#xff1a; 實現銀行自動取款機的以下基本操作功能&#xff1a;讀卡、取款、查詢。&#xff08;自動取款機中轉賬、修改密碼不作要求&#xff09; 具體要求&#xff1a; 讀卡…

基于SSM的校園奶茶點單管理系統

基于SSM的校園奶茶點單管理系統的設計與實現~ 開發語言&#xff1a;Java數據庫&#xff1a;MySQL技術&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 奶茶列表 登錄界面 管理員界面 用戶界面 摘要 隨著社會的發展和科技的進…

ubuntu搭建phpmyadmin+wordpress

Ubuntu搭建phpmyadmin wordpress Linux系統設置&#xff1a;Ubuntu 22配置apache2搭建phpmyadmin配置Nginx環境&#xff0c;搭建wordpress Linux系統設置&#xff1a;Ubuntu 22 配置apache2 安裝apache2 sudo apt -y install apache2設置端口號為8080 sudo vim /etc/apache…

paddle detection 訓練參數

#####################################基礎配置##################################### # 檢測算法使用YOLOv3,backbone使用MobileNet_v1,數據集使用roadsign_voc的配置文件模板,本配置文件默認使用單卡,單卡的batch_size=1 # 檢測模型的名稱 architecture: YOLOv3 # 根據…

【CCF-PTA】第03屆Scratch第05題 -- 統計出現次數最多的字

統計出現次數最多的字 【題目描述】 我國自古流傳下來不少膾炙人口的詩歌&#xff0c;各具特色&#xff0c;別具一格。有些詩只用寥寥幾個字&#xff0c;就能描繪出生動的意境。 請找出以下詩篇中出現次數最多的字&#xff0c;如果有多個字出現次數相同&#xff0c;則答案為…

Java中基于SSM框架的數據保存方法與日期處理

? 一、詳解 在SSM框架中&#xff0c;保存數據通常涉及到服務層和數據訪問層。服務層處理業務邏輯&#xff0c;而數據訪問層負責與數據庫進行交互。 二、代碼 Override public void save(Student student) { Date date new Date(); SimpleDateFormat format new Sim…

什么是LLC電路?

LLC電路是由2個電感和1個電容構成的諧振電路&#xff0c;故稱之為LLC&#xff1b; LLC電路主要由三個元件組成&#xff1a;兩個電感分別為變壓器一次側漏感(Lr)和勵磁電感(Lm)&#xff0c;電容為變壓器一次側諧振電容(Cr)。這些元件構成了一個諧振回路&#xff0c;其中輸入電感…

【C/PTA】函數專項練習(四)

本文結合PTA專項練習帶領讀者掌握函數&#xff0c;刷題為主注釋為輔&#xff0c;在代碼中理解思路&#xff0c;其它不做過多敘述。 目錄 6-1 計算A[n]1/(1 A[n-1])6-2 遞歸實現順序輸出整數6-3 自然數的位數(遞歸版)6-4 分治法求解金塊問題6-5 漢諾塔6-6 重復顯示字符(遞歸版)…