1边遍历边删除Arraylist中的元素,以下给出了各种可能的版本。
/**
* @author jy
* @date 2018年6月13日
* <p>Description: </p>
*/
package sort;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
/**
* @author jy
* @param <E>
*
*/
public class DelArrayList<E> {
/**
*
* @param list
* @param data
* <p>
* Description: 删除list中的所有的Data
* </p>
*/
public void delAll(ArrayList<E> list, E data) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == data) {
list.remove(i);
i--;// 遍历且删除过的位置重新遍历一遍,以免有相邻的重复元素未删除
}
}
}
/**
*
* @param list
* @param data
* <p>
* Description:遍历list,找到要删除的元素,删一个即可
* </p>
*/
public void delete(ArrayList<E> list, E data) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == data) {
list.remove(i);
break;
}
}
}
/**
*
* @param list
* @param data
* <p>
* Description: 先遍历,后删除
* </p>
*/
public void traversalDel(ArrayList<E> list, E data) {
Set set = new HashSet();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == data) {
set.add(data);
}
}
list.removeAll(set);
}
/**
* @param args
* <p>
* Description:
* </p>
*/
public static void main(String[] args) {
DelArrayList<Integer> app = new DelArrayList<Integer>();
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(4);
// app.delete(list, 2);
// app.delAll(list, 2);
app.traversalDel(list, 2);
for (int data : list) {
System.out.println(data);
}
DelArrayList<String> appStr = new DelArrayList<String>();
ArrayList<String> strList = new ArrayList<String>();
strList.add("a");
strList.add("b");
strList.add("c");
strList.add("d");
strList.add("d");
// appStr.delete(strList, "d");
// appStr.delAll(strList, "d");
appStr.traversalDel(strList, "c");
for (String data : strList) {
System.out.println(data);
}
}
}