日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】遍历时优雅地删除集合元素

發(fā)布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】遍历时优雅地删除集合元素 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

實體類

import java.io.Serializable; import java.util.Objects;public class Person implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return Objects.equals(id, person.id);}@Overridepublic int hashCode() {return Objects.hash(id);} }

數(shù)據(jù)預(yù)設(shè)定

idnameage
100Sam112
101Sam213
102Sam314
103Sam415
104Sam516
105Sam617
106Sam718
107Sam819
108Sam920

優(yōu)雅的List打印方式

list.forEach(System.out::println);

不知索引仍直接使用remove()

想直接remove()還不知索引,就需要按照equals()和hashCode()的指引,我們已經(jīng)設(shè)定equals()的判據(jù)是id,也就是相當(dāng)于把id當(dāng)成了辨別人的唯一依據(jù),那只需要構(gòu)造一個id為指定值的對象,就能直接刪了!

list.remove(new Person(101, "Bob", 333));

三種遍歷時的刪除方法

直接刪

直接刪注意index,如果刪一個元素,其后一個元素的index就減一了,此時我們?nèi)宰宨++,就會漏情況,所以要按下面說的寫:

for (int i = 0; i < list.size();) {if ("Sam5".equals(list.get(i).getName())) {list.remove(i);} else {i++;} }

增強for循環(huán)刪除

在這里面刪元素,再遍歷下去就是并發(fā)修改異常了,所以如果只刪一個的話,趕緊break吧!

for (Person p : list) {if ("Sam7".equals(p.getName())) {list.remove(p);break;} }

迭代器刪除

獲取List對象的迭代器,進行遍歷。
刪除使用iterator.remove(),能不出現(xiàn)并發(fā)修改異常,不需要一刪除就break。

Iterator<Person> iterator = list.iterator(); while (iterator.hasNext()) {Person p = iterator.next();if ("Sam3".equals(p.getName())) {iterator.remove();} }

完整代碼

import java.util.ArrayList; import java.util.Iterator; import java.util.List;public class ListRemoveTest {public static void main(String[] args) {List<Person> list = new ArrayList<>();list.add(new Person(100, "Sam1", 12));list.add(new Person(101, "Sam2", 13));list.add(new Person(102, "Sam3", 14));list.add(new Person(103, "Sam4", 15));list.add(new Person(104, "Sam5", 16));list.add(new Person(105, "Sam6", 17));list.add(new Person(106, "Sam7", 18));list.add(new Person(107, "Sam8", 19));list.add(new Person(108, "Sam9", 20));System.out.println("**********************************************");list.forEach(System.out::println);System.out.println("**********************************************");list.remove(new Person(101, "Bob", 333));list.forEach(System.out::println);System.out.println("**********************************************");for (int i = 0; i < list.size();) {if ("Sam5".equals(list.get(i).getName())) {list.remove(i);} else {i++;}}list.forEach(System.out::println);System.out.println("**********************************************");for (Person p : list) {if ("Sam7".equals(p.getName())) {list.remove(p);break;}}list.forEach(System.out::println);System.out.println("**********************************************");Iterator<Person> iterator = list.iterator();while (iterator.hasNext()) {Person p = iterator.next();if ("Sam3".equals(p.getName())) {iterator.remove();}}list.forEach(System.out::println);System.out.println("**********************************************");} }

測試結(jié)果

********************************************** Person{id=100, name='Sam1', age=12} Person{id=101, name='Sam2', age=13} Person{id=102, name='Sam3', age=14} Person{id=103, name='Sam4', age=15} Person{id=104, name='Sam5', age=16} Person{id=105, name='Sam6', age=17} Person{id=106, name='Sam7', age=18} Person{id=107, name='Sam8', age=19} Person{id=108, name='Sam9', age=20} ********************************************** Person{id=100, name='Sam1', age=12} Person{id=102, name='Sam3', age=14} Person{id=103, name='Sam4', age=15} Person{id=104, name='Sam5', age=16} Person{id=105, name='Sam6', age=17} Person{id=106, name='Sam7', age=18} Person{id=107, name='Sam8', age=19} Person{id=108, name='Sam9', age=20} ********************************************** Person{id=100, name='Sam1', age=12} Person{id=102, name='Sam3', age=14} Person{id=103, name='Sam4', age=15} Person{id=105, name='Sam6', age=17} Person{id=106, name='Sam7', age=18} Person{id=107, name='Sam8', age=19} Person{id=108, name='Sam9', age=20} ********************************************** Person{id=100, name='Sam1', age=12} Person{id=102, name='Sam3', age=14} Person{id=103, name='Sam4', age=15} Person{id=105, name='Sam6', age=17} Person{id=107, name='Sam8', age=19} Person{id=108, name='Sam9', age=20} ********************************************** Person{id=100, name='Sam1', age=12} Person{id=103, name='Sam4', age=15} Person{id=105, name='Sam6', age=17} Person{id=107, name='Sam8', age=19} Person{id=108, name='Sam9', age=20} **********************************************

總結(jié)

以上是生活随笔為你收集整理的【Java】遍历时优雅地删除集合元素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。