文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
- LeetCode:55. Jump Game(跳远比赛)
- Leetcode:300. Longest Increasing Subsequence(最大增长序列)
- LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)
遇到ArrayList问题是在项目中遇到的,当我要实现的功能:在一个list当中把一个元素从中间移到末尾,如下面例子:
// 测试ArrayList
@Test
public void TestListDemo() {
List<Person> list = new ArrayList<>();
Person person1 = new Person("zhangyu", "123", 23);
Person person2 = new Person("tangtuo", "123", 23);
Person person3 = new Person("zhangmin", "456", 21);
list.add(person1);
list.add(person2);
list.add(person3);
for (Person p : list) {
if (p.getUserName().equals("zhangyu")) {
list.remove(p);
list.add(p);
}
}
System.out.println(list);
}
这个例子出现问题,报错误为:
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.zhang.jdk8demo.StreamTest.TestListDemo(StreamTest.java:149)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
出现了并发包异常,需要这么做:
// 测试copyAndWriteList
@Test
public void TestCopyAndWriteListDemo() {
List<Person> list = new CopyOnWriteArrayList();
Person person1 = new Person("zhangyu", "123", 23);
Person person2 = new Person("tangtuo", "123", 23);
Person person3 = new Person("zhangmin", "456", 21);
list.add(person1);
list.add(person2);
list.add(person3);
for (Person p : list) {
if (p.getUserName().equals("zhangyu")) {
list.remove(p);
list.add(p);
}
}
System.out.println(list);
}
要这样才不会出现误差,在读的时候可以进行写入了,就实现了取出一个元素放到末尾的实现。