一俯树、List 包含兩個 remove 方法
1??按照下標(biāo)索引刪除
2??按照值刪除霞势,刪除第一個符合的值對象甘磨。
二共缕、for 循環(huán) remove
常見寫法:(由于下標(biāo)問題達不到想要效果)
for(int i=0;i<list.size();i++){
if(list.get(i).equals("del"))
list.remove(i);
}
但是直接使用list.remove(i)這個方法的時候莲蜘,刪除第一個繼續(xù)根據(jù)索引訪問第2個元素時谭确,因為刪除的關(guān)系后面的元素都往前移動了一位,所以實際訪問的是第3個元素票渠。因此逐哈,這種方式可以用在刪除特定的一個元素時使用,但不適合循環(huán)刪除多個元素時使用问顷。倒序操作可以避免下標(biāo)問題昂秃,修改如下:
int size = list.size();
for(int i=size-1;i>=0;i--){
if(list.get(i).equals("del"))
list.remove(i);
}
三禀梳、foreach remove
常見錯誤:(會拋出ConcurrentModificationException)
for(String x:list){
if(x.equals("del"))
list.remove(x);
}
應(yīng)改為:
//cowlist為原list
CopyOnWriteArrayList<Record> list = new CopyOnWriteArrayList<Record>(cowList);
for(String x:list){
if(x.equals("del"))
list.remove(x);
}
四、iterator 遍歷 remove
注意:用的是迭代器的 remove 方法肠骆,而不是 list 的 remove 方法算途。
//iterator遍歷,查出對應(yīng)值蚀腿,做對應(yīng)操作
Iterator<String> it = list.iterator();
while(it.hasNext()){
String x = it.next();
if(x.equals("del")){
it.remove();
}
}
最好使用 Iterator 遍歷嘴瓤,找到對應(yīng)的值,全部給 remove 掉莉钙,這樣就不會受索引的影響廓脆。
五、List 集合移除 null 元素
1??集合空元素的處理磁玉,api 有直接處理的方法停忿,使用的是迭代器,本質(zhì)上還是 for 循環(huán)的思想蚊伞。list.removeAll(Collections.singleton(null));
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("1");
list.add(null);
list.add("2");
list.add(null);
System.out.println(list);//[1, null, 2, null]
list.removeAll(Collections.singleton(null));
System.out.println(list);//[1, 2]
}
2??迭代器移除
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("1");
list.add("2");
list.add(null);
Iterator it = list.iterator();
while (it.hasNext()) {
if (it.next() == null) {
it.remove();
}
}
System.out.println(list);
}
3??創(chuàng)建一個元素為 null 的 list席赂,再 removeAll。
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("1");
list.add("2");
list.add(null);
List nullList = new ArrayList();
nullList.add(null);
list.removeAll(nullList);
System.out.println(list);
}
4?? 使用 for 循環(huán):這種處理方式是把要處理的集合進行遍歷时迫,取出其中不為空的元素颅停,添加到新的集合中。
public static <T> List<T> removeNull(List<? extends T> oldList) {
List<T> listTemp = new ArrayList();
for (int i = 0; i < oldList.size(); i++) {
if (oldList.get(i) != null) {
listTemp.add(oldList.get(i));
}
}
return listTemp;
}