【Java】遍历时优雅地删除集合元素
生活随笔
收集整理的這篇文章主要介紹了
【Java】遍历时优雅地删除集合元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實體類
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);} }數據預設定
| 100 | Sam1 | 12 |
| 101 | Sam2 | 13 |
| 102 | Sam3 | 14 |
| 103 | Sam4 | 15 |
| 104 | Sam5 | 16 |
| 105 | Sam6 | 17 |
| 106 | Sam7 | 18 |
| 107 | Sam8 | 19 |
| 108 | Sam9 | 20 |
優雅的List打印方式
list.forEach(System.out::println);不知索引仍直接使用remove()
想直接remove()還不知索引,就需要按照equals()和hashCode()的指引,我們已經設定equals()的判據是id,也就是相當于把id當成了辨別人的唯一依據,那只需要構造一個id為指定值的對象,就能直接刪了!
list.remove(new Person(101, "Bob", 333));三種遍歷時的刪除方法
直接刪
直接刪注意index,如果刪一個元素,其后一個元素的index就減一了,此時我們仍讓i++,就會漏情況,所以要按下面說的寫:
for (int i = 0; i < list.size();) {if ("Sam5".equals(list.get(i).getName())) {list.remove(i);} else {i++;} }增強for循環刪除
在這里面刪元素,再遍歷下去就是并發修改異常了,所以如果只刪一個的話,趕緊break吧!
for (Person p : list) {if ("Sam7".equals(p.getName())) {list.remove(p);break;} }迭代器刪除
獲取List對象的迭代器,進行遍歷。
刪除使用iterator.remove(),能不出現并發修改異常,不需要一刪除就break。
完整代碼
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("**********************************************");} }測試結果
********************************************** 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} **********************************************總結
以上是生活随笔為你收集整理的【Java】遍历时优雅地删除集合元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】AttributeErr
- 下一篇: 【Python】处理 joblib.ex