删除ArrayList元素的4种正确方法

1.倒序删

倒序删不会出现像正序删那样因为删完元素后剩余的元素索引发生改变而遗漏元素并且最终会报java.lang.IndexOutOfBoundsException异常的情况。

public static void remove(List<String> list, String target){
    for(int i = list.size() - 1; i >= 0; i--){
        String item = list.get(i);
        if(target.equals(item)){
            list.remove(item);
        }
    }
}
2.CopyOnWriteArrayList线程安全删除

利用CopyOnWrite容器。CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

public static void remove(ArrayList<String> list, String target) {
    final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
    for (String item : cowList) {
        if (item.equals(target)) {
            cowList.remove(item);
        }
    }
}
3.迭代器remove方法删除(推荐)
public static void remove(List<String> list, String target){
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        String item = iter.next();
        if (item.equals(target)) {
            iter.remove();
        }
    }
}
4.增强for循环中删除

增强for循环中删除元素后继续循环会报java.util.ConcurrentModificationException异常,因为元素在使用的时候发生了并发的修改,导致异常抛出,但是删除完毕马上使用break跳出,则不会触发报错。

public static void remove(List<String> list, String target){
    for (String item : list) {
        if (item.equals(target)) {
            list.remove(item);
            break;
        }
    }
}

原文地址:https://www.cnblogs.com/flotang/p/9216098.html

时间: 2024-10-10 09:12:47

删除ArrayList元素的4种正确方法的相关文章

Java编程:删除 List 元素的三种正确方法

删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化: 对 List 进行删除操作可能会产生并发问题: 我们通过代码示例演示正确的删除逻辑 package com.ips.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class A

web页面元素的8种定位方法

一.web页面元素定位工具介绍 1.打开google浏览器,按F12进入开发者模式,如下图: 2.用鼠标点击下图红色框中的箭头——然后鼠标移动到web页面的元素上(此处为百度框),会自动定位到对应的html代码,如下图: 二.web页面元素的8种定位方法: 1.通过元素的id属性来定位元素——id是唯一标识(每个id都是不一样的) driver.find_element_by_id("kw")     1 from selenium import webdriver 2 driver=

python中删除某个元素的3种方法

python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明: >>> str=[1,2,3,4,5,2,6] >>> str.remove(2) >>> str [1, 3, 4, 5, 2, 6] 2.pop: 删除单个或多个元素,按位删除(根据索引删除) ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:××× 寻找有志同道合

删除数组元素并重建索引的方法

我们在用unset($arr($k))来删除数组元素时,会发现被删除的值的索引空了,因为业务的需要,我们有时候需要保留索引 有以下两种方法: 方法一:array_values函数 $arr = array(1,2,3,4); unset($arr[1]); echo $array[1]; // error Undefined offset print_r($arr); // 输出如下 /** Array ( [0] => 1 [2] => 3 [3] => 4 ) **/ $arr =

js中删除数组元素的几种方法

1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   //['a','c','d']         删除起始下

js删除数组元素的几种方法

1.splice方法,第一个参数是数组下标,第二个参数是删除长度 var ary = [1,2,3,4]; ary.splice(0,ary.length); ary.splice(0,1); 2.delete arr[1] 参数是需要删除的数组的下标,这种方式删除不会改变数组的长度,第二个被删除项会变成udifined 3.ary.remove(0)参数是需要删除的数组的下标,这种方法删除会缩短数组的长度

(转)获取/设置IFRAME内对象元素的几种JS方法

原帖地址:http://blog.csdn.net/theforever/article/details/6126635 1.IE专用(通过frames索引形象定位): document.frames[i].document.getElementById('元素的ID');2.IE专用(通过IFRAME名称形象定位): document.frames['iframe的name'].document.getElementById('元素的ID'); 以上方法,不仅对IFRAME适用,对FRAMES

Js---获取网页中HTML元素的几种分析方法

getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getElementsByTagName 后两个是得到集合,byid只是得到单个对象 getElementById 的用法 举个例子: <a id="link1" name="link1" href=http://homepage.yesky.com>网页陶吧</

获得同级iframe页面的指定ID元素的几种实现方法

1.JS实现: var object= window.parent.frames("要获得的iframe的name").contentDocument.getElementById("元素id"); 2.jquery实现: var object =$( "元素id", window.parent.frames("iframe的name").contentDocument); iframe获得父页面指定id的元素的方法: var