首页 > 解决方案 > 如何复制列表进入java中的当前数组列表?(通用列表)

问题描述

  public class ArrayList<E> {
       public static final int DEFAULT_CAPACITY = 10;

       private int size; // number of occupied space
       private E[] data; // ArrayList, encapsulate with the private keyword

       public ArrayList() {
          this(DEFAULT_CAPACITY);
          size = 0;
       }

       @SuppressWarnings("unchecked")
       public ArrayList(int capacity) {
           data = (E[])new Object[capacity];
           size = 0;

           if(capacity < 0) {
               throw new IllegalArgumentException("Capacity should more than 0");
           }
       }

       //Need to be fixed
       //
       //
       //
       public ArrayList(List<E> other) {
           List<E> newList = new ArrayList<E>();


       }
}

这是我的代码,我用最后一个参数(List other)创建了一个构造函数。我尝试将列表复制到当前数组列表中;E[] 数据,变量。但错误是 List 无法将数据复制到 E[]。所以,我有点困惑。我怎样才能复制它们?如果我不能如何复制列表?

标签: javalistgenerics

解决方案


这应该这样做。

   @SuppressWarnings("unchecked")
   public ArrayList(List<E> other) {
       data = (E[]) other.toArray();
       size = data.length;
   }

我们正在使用toArray()所有List类型实现的方法。

或者分配一个数组并使用适当类型的循环复制元素。(避免使用get(i),因为它O(N)适用于某些类型的列表。)

笔记:

  1. 将您的类与标准库中常用的类同名是个坏主意(java.util.ArrayList

  2. 您的课程没有实现java.util.List<E>. 应该是?

  3. 如果您正在实施java.util.List<E>,您可以通过扩展java.util.AbstractList<E>.


推荐阅读