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.

  • 相关阅读:
    codevs 1069关押罪犯
    codevs 1497取余运算
    codevs 3324 新斯诺克
    codevs 3286 火柴排队
    继续畅通工程
    还是畅通工程
    畅通工程(并查集找根节点)
    Eddy's picture(最小生成树)
    Constructing Roads(最小生成树)
    Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/zhjj/p/7095321.html
Copyright © 2011-2022 走看看