文章最前: 我是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);
}
要這樣纔不會出現誤差,在讀的時候可以進行寫入了,就實現了取出一個元素放到末尾的實現。