zoukankan      html  css  js  c++  java
  • How to copy a java.util.List into another java.util.List

    解答一

    Just use this:

    List<SomeBean> newList = new ArrayList<SomeBean>(otherList);
    

    Note: still not thread safe, if you modify otherList from another thread, then you may want to make that otherList (and even newList) a CopyOnWriteArrayList, for instance -- or use a lock primitive, such as ReentrantReadWriteLock to serialize read/write access to whatever lists are concurrently accessed.

    解答二

    This is a really nice Java 8 way to do it:

    List<String> list2 = list1.stream().collect(Collectors.toList());
    

    Of course the advantage here is that you can filter and skip to only copy of part of the list.

    e.g.
    //don't copy the first element
    List list2 = list1.stream().skip(1).collect(Collectors.toList());

    解答三

    I tried something similar and was able to reproduce the problem (IndexOutOfBoundsException). Below are my findings:

    1. The implementation of the Collections.copy(destList, sourceList) first checks the size of the destination list by calling the size() method. Since the call to the size() method will always return the number of elements in the list (0 in this case), the constructor ArrayList(capacity) ensures only the initial capacity of the backing array and this does not have any relation to the size of the list. Hence we always get IndexOutOfBoundsException.

    2. A relatively simple way is to use the constructor that takes a collection as its argument:

      List wsListCopy=new ArrayList(wsList);

    解答四

    originalArrayList.addAll(copyArrayofList);
    

    Please keep on mind whenever using the addAll() method for copy, the contents of both the array lists (originalArrayList and copyArrayofList) references to the same objects will be added to the list so if you modify any one of them then copyArrayofList also will also reflect the same change.

    If you don't want side effect then you need to copy each of element from the originalArrayList to the copyArrayofList, like using a for or while loop.

  • 相关阅读:
    吴恩达机器学习笔记——梯度下降算法(2)
    吴恩达机器学习笔记——梯度下降算法(1)
    Java面向对象
    实体框架
    Android Studio 3.4.1中使用com.android.support.v4.view.ViewPager提示不存在该类或程序闪退
    7、认识 Android Service
    安卓付费课程
    在Android Studio中如何添加GSON
    android studio 添加Volley
    android studio里面怎么看file explorer啊?
  • 原文地址:https://www.cnblogs.com/zhjj/p/7095321.html
Copyright © 2011-2022 走看看