【问题标题】:How to concat two ArrayLists?如何连接两个 ArrayList?
【发布时间】:2012-12-10 15:58:01
【问题描述】:

我有两个大小相同的ArrayLists。列表 1 包含 10 个姓名,列表 2 包含他们的电话号码。

我想将名称和数字合并为一个ArrayList。我该怎么做?

【问题讨论】:

  • concat 到底是什么意思?建立一个包含名称和数字的 10 个元素的新列表?
  • 我想在新的 Arraylist 中有一个字符串,它同时具有名称和编号。

标签: java arraylist concatenation concat


【解决方案1】:

如果你想做一行并且你不想改变 list1 或 list2 你可以使用 stream 来做

List<String> list1 = Arrays.asList("London", "Paris");
List<String> list2 = Arrays.asList("Moscow", "Tver");

List<String> list = Stream.concat(list1.stream(),list2.stream()).collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    对于不复制条目的轻量级列表,您可以这样使用:

    List<Object> mergedList = new ConcatList<>(list1, list2);
    

    这里是实现:

    public class ConcatList<E> extends AbstractList<E> {
    
        private final List<E> list1;
        private final List<E> list2;
    
        public ConcatList(final List<E> list1, final List<E> list2) {
            this.list1 = list1;
            this.list2 = list2;
        }
    
        @Override
        public E get(final int index) {
            return getList(index).get(getListIndex(index));
        }
    
        @Override
        public E set(final int index, final E element) {
            return getList(index).set(getListIndex(index), element);
        }
    
        @Override
        public void add(final int index, final E element) {
            getList(index).add(getListIndex(index), element);
        }
    
        @Override
        public E remove(final int index) {
            return getList(index).remove(getListIndex(index));
        }
    
        @Override
        public int size() {
            return list1.size() + list2.size();
        }
    
        @Override
        public void clear() {
            list1.clear();
            list2.clear();
        }
    
        private int getListIndex(final int index) {
            final int size1 = list1.size();
            return index >= size1 ? index - size1 : index;
        }
    
        private List<E> getList(final int index) {
            return index >= list1.size() ? list2 : list1;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用.addAll() 将第二个列表的元素添加到第一个:

      array1.addAll(array2);
      

      编辑:根据您上面的说明(“我希望在新的 Arraylist 中有一个字符串,它同时具有名称和编号。”),您需要循环通过第一个列表并将第二个列表中的项目附加到它。

      类似这样的:

      int length = array1.size();
      if (length != array2.size()) { // Too many names, or too many numbers
          // Fail
      }
      ArrayList<String> array3 = new ArrayList<String>(length); // Make a new list
      for (int i = 0; i < length; i++) { // Loop through every name/phone number combo
          array3.add(array1.get(i) + " " + array2.get(i)); // Concat the two, and add it
      }
      

      如果你输入:

      array1 : ["a", "b", "c"]
      array2 : ["1", "2", "3"]
      

      你会得到:

      array3 : ["a 1", "b 2", "c 3"]
      

      【讨论】:

      • 您可能想要指定array3 的大小。即new ArrayList&lt;String&gt;(array1.size())。也是size() 而不是length()
      【解决方案4】:
      var arr3 = new arraylist();
      for(int i=0, j=0, k=0; i<arr1.size()+arr2.size(); i++){
          if(i&1)
              arr3.add(arr1[j++]);
          else
              arr3.add(arr2[k++]);
      }
      

      正如你所说,“名字和数字并排”。

      【讨论】:

        【解决方案5】:

        一个ArrayList1添加到数据,

        mArrayList1.add(data);
        

        和Second ArrayList2添加其他数据,

        mArrayList2.addAll(mArrayList1);
        

        【讨论】:

          【解决方案6】:

          将一个 ArrayList 添加到第二个 ArrayList 为:

          Arraylist1.addAll(Arraylist2);
          

          编辑:如果您想从两个现有的 ArrayList 创建新的 ArrayList,请执行以下操作:

          ArrayList<String> arraylist3=new ArrayList<String>();
          
          arraylist3.addAll(Arraylist1); // add first arraylist
          
          arraylist3.addAll(Arraylist2); // add Second arraylist
          

          【讨论】:

          • 数字显示在名字之后,我想要名字和数字并排。你能帮帮我吗?
          • @anirudhmaddy : 好的,您希望新数组列表中的名称+数字在同一索引处?
          【解决方案7】:
          ArrayList<String> resultList = new ArrayList<String>();
          resultList.addAll(arrayList1);
          resultList.addAll(arrayList2);
          

          【讨论】:

            猜你喜欢
            • 2019-05-29
            • 2015-11-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-10
            • 1970-01-01
            • 2011-04-01
            • 2020-03-08
            相关资源
            最近更新 更多