java的copyAndWriteList的使用

文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。

相關文章:

  1. LeetCode:55. Jump Game(跳遠比賽)
  2. Leetcode:300. Longest Increasing Subsequence(最大增長序列)
  3. 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);
    }

要這樣纔不會出現誤差,在讀的時候可以進行寫入了,就實現了取出一個元素放到末尾的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章