【发布时间】:2021-09-25 08:28:39
【问题描述】:
我想写一个函数来创建一个随机数流:
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class fillRandom {
public static List<Integer> IntFill(){
return new Random().ints(10,0,100).boxed().collect(Collectors.toList());
}
}
然后我想将它返回到我的 LinkedList:
public class Main {
public static void main(String[] args) throws Exception {
List linkedList = new LinkedList<Integer>();
Print printer = new printImpl();
linkedList = (LinkedList) fillRandom.IntFill();
printer.print(linkedList);
}
}
但我收到一个错误Exception in thread "main" java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.util.LinkedList
如果没有collect(Collectors.toCollection(LinkedList::new)),是否可以做一些事情让它工作?如果我不想从 Random 中准确返回 ArrayList
【问题讨论】:
-
你为什么不想使用
toCollection?它有什么问题? -
@Sweeper 好吧,我只是认为最好不要依赖一种实现,而是分配我拥有的一个(LinkedList 或 ArrayList)
-
List<Integer> list = fillRandom.IntFill(); List<Integer> lL = new LinkedList<>(list); -
为什么要
LinkedList?就性能和内存开销而言,这几乎总是错误的选择。 -
您提到“分配我拥有的那个”,但是您将其分配给列表。您将其声明为
List linkedlist而不是LinkedList linkedlist。您使用new LinkedList<Integer>()创建的第一个 LinkedList 被完全丢弃,并在您将其分配给linkedList = (LinkedList) fillRandom.IntFill()中的新链接后立即收集垃圾。