一、ListRemove用法
List.remove(object o)
在Java的List接口中,remove()方法是一個非常基礎的方法。它的作用是將列表中的一個元素移除並返回這個被移除的元素。這個方法有一個參數,這個參數就是需要被移除的元素o。
舉例來說,假設我們有一個String類型的List列表names,列表中包含字符串”John”、”Mike”、”Lucy”,我們可以使用如下代碼將”Mike”這個字符串從列表中移除:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); names.remove("Mike");
二、ListRemoveAt
list.remove(int index)
remove()方法也可以通過傳入元素的下標來移除元素。如果我們想要移除名字列表的第二個元素”Mike”,我們可以使用remove()方法,並傳入下標1:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); names.remove(1);
三、ListRemove不掉
有時候我們會遇到一個非常詭異的情況:調用remove()方法移除元素,但元素並沒有被移除。這種情況通常是因為我們在進行迭代的時候直接使用了List對象,而不是使用迭代器遍歷List。
下面的代碼就是一個反例:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); for (String name : names) { if (name.equals("Mike")) { names.remove(name); } }
上述代碼將會拋出ConcurrentModificationException異常,應該使用Iterator(迭代器)來遍歷List,並在需要移除元素時使用迭代器的remove()方法:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); Iterator iterator = names.iterator(); while (iterator.hasNext()) { String name = iterator.next(); if (name.equals("Mike")) { iterator.remove(); } }
四、ListRemoveIf
list.removeIf(Predicate filter)
Java 8引入了一個新的removeIf()方法,可以方便地根據一個條件移除集合中的元素。這個方法接收一個Predicate類型的參數,這個參數表示移除哪些元素。下面的例子中移除了所有的偶數元素:
List numbers = new ArrayList(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); numbers.removeIf(n -> (n % 2 == 0));
五、remove方法
Collections.sort(List, Comparator)
我們可以通過remove()方法,將列表中符合條件的元素全部移除。下面的例子中,移除了列表中長度為3的字符串:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); names.removeIf(n -> n.length() == 3);
六、List的remove方法參數
boolean remove(Object o)
在List接口中,除了remove()方法以外還有一個方法,這個方法的參數是一個Object類型。和根據下標索引刪除不同,這裡需要傳入的是列表中實際存在的元素,若元素沒有找到,則返回false。
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); names.remove("Jack"); // 返回false
七、List集合remove方法
list.removeAll(Collection c)
removeAll()方法可以將一個集合中的所有元素都從另一個集合中移除。下面的例子將移除列表a中和列表b中相同的元素:
List a = new ArrayList(); a.add("John"); a.add("Ben"); a.add("Mike"); List b = new ArrayList(); b.add("John"); b.add("Alice"); a.removeAll(b); // [Ben, Mike]
八、實現List的remove方法
除了基本的List.remove()方法以外,有時我們也需要實現自己的remove方法。例如,在自己的LinkedList類中重寫remove方法:
@Override public boolean remove(Object o) { Node current = first; while (current != null) { if ((o == null && current.element == null) || (o != null && o.equals(current.element))) { unlink(current); size--; return true; } current = current.next; } return false; }
九、ListRemove方法
remove方法可以移除List中的某個元素。如果需要刪除List中的某個子集合中的所有元素,可以這樣做:
List names = new ArrayList(); names.add("John"); names.add("Mike"); names.add("Lucy"); List subList = new ArrayList(); subList.add("John"); subList.add("Mike"); names.removeAll(subList);
十、ListRemove報錯
有時,List.remove()方法運行時會報錯,最常見的錯誤是IndexOutOfBoundsException。這種異常通常是在通過下標索引刪除元素時出現的。
下面的例子將會拋出IndexOutOfBoundsException異常:
List names = new ArrayList(); names.add("John"); names.remove(1);
在這個例子中,names列表中只有一個元素,所以當我們試圖刪除下標為1的元素時就會拋出異常。正確的方法應該是使用下標0來刪除:
List names = new ArrayList(); names.add("John"); names.remove(0);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/269986.html