1

我需要一个创建集合构造函数。这是一个构造函数将它的所有元素从我的数组复制到新的 TimeArrayList 中。

到目前为止,我的构造函数看起来像这样

private E[] timeData;
private int capacity = 0;

public TimeArrayList(Collection<? extends E> c) {
    timeData = (E[]) new Object[capacity];
    for (int i = 0; i < timeData.length; i++) {
  //this is where  im having the problem
}
}

我不知道如何从我的数组中获取值并创建一个数组列表。我想我还必须在某个地方放置一个迭代器。

4

3 回答 3

2

获取类型数组的最简单方法首先,您需要为数据分配空间:

timeData = new (E[]) new Object[c.size()];

之后,您可以添加 的内容c,例如:

编辑:更改为使用 toArray,如评论中指出的那样。

c.toArray(timeData);

但实际上,最简单的方法是利用标准库而忘记手动使用数组:

List<E> timeData;
...
// and in constructor:
timeData = new ArrayList<E>(c);
于 2013-09-30T20:26:53.413 回答
0

我要做的是检查 C 中的元素数量,并使用迭代器来迭代这些元素并将它们添加到您的 timeData 数组中。

此外,正如 arynaq 所说,您还可以使用 toArray() 方法:请参阅https://stackoverflow.com/a/3293970/1688441

public TimeArrayList(Collection<? extends E> c) {

        //Long way
        timeData = (E[]) new Object[c.size()];
        int element = 0;

        Iterator<? extends E> it = c.iterator();
        while(it.hasNext())timeData[element++] = it.next();

        //Short way
        timeData = c.toArray(timeData);     

    }
于 2013-09-30T20:26:01.253 回答
0

我会用这种方式写它,而不用capacity

 public class TimeArrayList<E> {

   private List<? super E>  timeData = null;

   public TimeArrayList(Collection<? extends E> src) {

     this.timeData = new ArrayList<E>(src.size());

     Iterator<? extends E> collectionIterator = src.iterator();

     for (int i = 0; collectionIterator.hasNext(); i++) {
         this.timeData.set(i, collectionIterator.next());
     }  
   }
}

奇怪的短语? super E意味着目标列表可能具有任何类型的元素,它是 的超类型E,就像源列表可能具有任何类型的元素,它是 的子类型E

于 2013-09-30T20:31:50.123 回答