Home > Java > javaTutorial > body text

Things to note when deleting List in Java

高洛峰
Release: 2017-01-22 16:15:57
Original
1181 people have browsed it

When deleting LIST in java, list.remove(o) is generally used; but this often causes problems. Let’s look at the following code first:

package com.demo;
  
import java.util.ArrayList;
import java.util.List;
  
public class Test11 {
    
  public void delete(){
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    for (int i = 0; i < list.size(); i++) {
      if(list.get(i)==2){
        list.remove(i);
      }
    }
    this.outputList(list);
  }
    
  private void outputList(List<Integer> list){
    for (Integer i : list) {
      System.out.println(i);
    }
  }
  
  public static void main(String[] args) {
    Test11 t = new Test11();
    t.delete();
      
  }
  
}
Copy after login

The return result is:

1
 
2
 
3
Copy after login

This result is obviously not what we expected. We wanted to delete all elements with an index of 2 in the List, but 2 appeared in the output result. This is because when i equals 1, element 2 with index 1 in the List was deleted. , at this time the list is [1,2,3], but then, after i is incremented, it is equal to 2. When list.get(i), the result taken out becomes 3, which means that as the list elements When deleting, the index will change accordingly. This is the trap. Therefore, we have to find an iterative method to delete that does not change the index when deleting. After the iterator is created, a single pointer to the original object will be created. Linked index table, when the original number of objects changes, the contents of this index table will not change synchronously, that is, cursor is used to maintain this index table, so it can be deleted like this:

package com.demo;
  
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
  
public class Test11 {
    
  public void delete(){
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    this.iteratorDelete(list.iterator(), 2);
    this.outputList(list);
  }
    
  private void iteratorDelete(Iterator<Integer> it, int deleteObject){
    while(it.hasNext()){
      int i = it.next();
      if(i==deleteObject){
        it.remove();
      }
    }
  }
    
  private void outputList(List<Integer> list){
    for (Integer i : list) {
      System.out.println(i);
    }
  }
  
  public static void main(String[] args) {
    Test11 t = new Test11();
    t.delete();
      
  }
  
}
Copy after login

This code result That’s right!

Some people may say, I deleted it in the iterator, why did the value of the list change? Think about this issue yourself! If you can’t figure it out, you can change careers!

Summary

The above is the entire content of this article. I hope the content of this article can bring some help to everyone's study or work. If you have any questions, you can leave a message to communicate.

For more related articles on matters needing attention when deleting List in Java, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template