public class DateUtilTest {
public void testDeleteElement(List<String> list) throws Exception{
for (int i=list.size()-1;i>=0;i--) {
if(list.get(i).equals("5")){
list.remove(i);
continue;
}
if(i%1000 == 0){
Thread.sleep(100);
System.out.println("Current Thread is " + Thread.currentThread().getName());
}
}
System.out.println(list.toString());
}
public void testDeleteElementWithIterator(List<String> list) throws Exception{
Iterator<String> iterator = list.iterator();
int i=0;
while(iterator.hasNext()){
if(iterator.next().equals("5")){
iterator.remove();
}
if(i%1000 == 0){
Thread.sleep(100);
System.out.println("Current Thread is " + Thread.currentThread().getName());
}
i++;
}
System.out.println(list.toString());
}
public static void main(String[] args) throws Exception{
DateUtilTest test = new DateUtilTest();
List<String> list = test.init();
Thread t1 = new Thread(
new Runnable() {
@Override
public void run() {
try{
test.testDeleteElementWithIterator(list);
System.out.println("Thread1 is running");
}catch(Throwable t){
t.printStackTrace();
}
}
}, "thread-1"
);
Thread t2 = new Thread(
new Runnable() {
@Override
public void run() {
try{
test.testDeleteElementWithIterator(list);
System.out.println("Thread2 is running");
}catch(Throwable t){
t.printStackTrace();
}
}
}, "thread-2"
);
t1.start();
t2.start();
}
public List<String> init(){
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
for(int i=10; i< 100000; i++){
list.add(i + "");
}
return list;
}
}
用iterator会报ConcurrentModificationException异常在并发的时候,用index不会。
分享到:
相关推荐
在两个List中找到相同的元素,但它们的值不同。这需要我们遍历两个List,比较每个元素的值。我们可以创建一个辅助函数来检查元素是否被编辑: ```java public boolean isElementEdited(Object oldElement, Object ...
在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List[A]` 此方法用于向列表的末尾...
总结来说,本文主要解决了在element-ui的el-select组件中设置不可删除默认选项的问题,并提供了四种可能的解决思路。其中,使用Vue指令和CSS样式隐藏关闭按钮是相对简单和推荐的方法,既能够有效禁止删除操作,又...
在Python编程语言中,列表(list)是一种非常重要的数据结构,它可以存储任意类型的对象,包括数字、字符串,甚至是其他列表。当我们谈论“list嵌套list”时,这意味着在一个列表内部包含了一个或多个列表,这样的...
List是C#中一种非常实用的数据结构,它提供了动态数组的功能,允许我们在运行时添加、删除或修改元素。当需要对这些数据进行分组和筛选时,C#提供了Linq(Language Integrated Query,语言集成查询)这一强大的工具...
Java 数组转 List Java 数组转换为 List 是 Java 编程中一个常见的操作。List 是 Java 中的一种集合类型,用于存储多个...Java 数组转换为 List 是 Java 编程中一个常见的操作,两种常见的方法可以满足不同的需求。
在本文中,我们将介绍四种不同的方法来删除 Android List 中的重复数据。 方法一:通过循环进行删除 该方法使用双重循环来删除重复数据。外层循环遍历列表,内层循环从后向前遍历列表,比较每个元素是否相等,如果...
在C++标准模板库(STL)中,`list`是一种双向链表容器。它主要用于存储数据元素,并且能够高效地进行插入和删除操作。与`vector`或`deque`等其他序列容器相比,`list`在内存上不连续存储其元素,而是通过指针链接来...
总之,`Java List`是编程中不可或缺的数据结构,它提供了一种灵活的方式来存储和操作有序集合。通过选择合适的`List`实现(如`ArrayList`或`LinkedList`),并熟练掌握其各种方法,你可以在实际项目中有效地管理数据...
线性表是一种常见的数据结构,它由相同类型元素的有序序列组成,允许在表的任何位置进行插入和删除操作。本篇文章将深入探讨如何在C++环境下实现线性表的创建、插入和删除操作。 一、线性表的创建 线性表的创建...
Python的list是编程语言中非常基础且重要的数据结构,它是一种有序的集合,可以容纳不同类型的元素,如整数、浮点数、字符串甚至其他列表。以下是对标题和描述中涉及的Python list用法的详细解释: 1. **定义list**...
在C++标准库中,`list`是一种双向链表容器,它允许在其两端进行高效的插入和删除操作。与`vector`不同,`list`在内存中不是连续存储的,这使得它在执行插入和删除操作时具有更高的效率。但是,由于链表的特性,`list...
在Java中,遍历List并移动元素通常有两种主要方式:迭代器(Iterator)和增强for循环(foreach)。以下是这两种方法的详细说明: 1. 迭代器(Iterator): 迭代器是Java集合框架提供的一种统一的遍历方式,它可以...
### Python中的列表(List)及其与数组(Array)的相互...通过上述介绍的方法,我们可以轻松地在这两种数据结构之间进行转换,以满足不同的需求场景。希望这些知识点能够帮助读者更好地理解和使用Python中的列表和数组。
ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,适用于不同的场景。此外,匿名类的概念在Java中用于简化代码结构,尤其是在实现接口时。 1. **List接口** List接口继承自Set接口,它不仅提供了...
Java集合框架支持两种类型的排序:自然排序和定制排序。自然排序是指元素自身具备比较性,如String和Integer。定制排序则通过Comparator接口实现,可以自定义比较规则。 - 对于List,可以通过`Collections.sort...
3. **对象等价性**:在Java中,对象等价性分为两种:引用等价性和逻辑等价性。引用等价性是指两个对象是否指向内存中的同一个位置,即它们的引用是否相同。而逻辑等价性关注的是对象的内容是否相同,即使它们在内存...
在Java编程语言中,Array(数组)和List是两种常用的数据结构,它们各自有各自的特性和应用场景。然而,在实际开发中,我们常常需要在数组和列表之间进行转换,以适应不同的需求。本篇将深入探讨Java中如何实现Array...
在Java编程语言中,`List`、`Map`是两种非常重要的数据结构,它们在处理序列数据和键值对数据时发挥着关键作用。这里我们将深入探讨`ArrayList`、`Vector`、`HashMap`和`Hashtable`这四种数据结构的用法以及多种遍历...