【问题标题】:Converting LinkedList to Arrary [duplicate]将LinkedList转换为数组[重复]
【发布时间】:2015-02-04 04:37:52
【问题描述】:

我创建了一个LinkedList,其中存储了一个Employee 对象。我需要编写一个方法convertToArray,通过从LinkedList 中获取Employees 数组。

有什么想法吗?

【问题讨论】:

  • 到目前为止你做了哪些努力?
  • 嗯,你可以尝试获取链表的大小。接下来你会做什么?你能遍历链表吗?你能有一个相同大小的数组吗?试试看。

标签: java arrays


【解决方案1】:
public <T> T[] convert (List<T> list) {
    if(list.size() == 0 ) {
        return null;
    }
    T[] array = (T[])Array.newInstance(list.get(0).getClass(), list.size());
    for (int i=0;i<list.size();i++) {
        array[i] = list.get(i);
    }
    return array;
}

【讨论】:

  • 我需要将它放入一个可以将任何链表转换为数组的方法中。 public void convertToArray()我会这样做吗?
  • 这个方法适合你吗
【解决方案2】:

最简单的方法是利用 LinkedList.toArray 方法

  // create an array and copy the list to it
  Employee[] array = list.toArray(new Employee[list.size()]);

但是,如果您只是在学习并且想要迭代地执行此操作。考虑一下如何声明所有项并将所有项放入一个数组中。

首先,你需要做什么?

1) 声明员工的数组

为了做到这一点,您需要知道数组的大小,因为数组的大小在声明后无法更改。有一个从 List 继承的方法叫做 .size()

Employee[] array = new Employee[list.size()]

2) 对数组中的每个槽,复制列表中对应的元素

为此,您需要使用 for 循环

for(int i = 0; i < array.length; i++) {
  //access element from list, assign it to array[i]
}

【讨论】:

  • 这是一个小问题,但是传递给toArray 的数组可以是任意长度,包括0。toArray 将返回一个新分配的相同类型的数组。
  • @JeffBowman 如果您传入一个大小合适的数组,该方法就不必创建另一个大小合适的数组来返回给您。
  • 很公平。我忘记了数组实例是reused if possible
【解决方案3】:
Employee[] arr = new Employee[list.size()];
int i = 0;
for(Employee e : list) {
  arr[i] = e;
  i++;
}

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2020-05-04
    • 2015-10-07
    • 2012-09-27
    • 2014-06-11
    • 2012-02-08
    • 2014-02-14
    • 2012-04-06
    • 2016-12-25
    相关资源
    最近更新 更多