Java 列表在不同场景中的实现

Java 列表在不同场景中的实现,java,list,memory-management,Java,List,Memory Management,我想问一个非常简单的问题。初始化变量有两种方法: 一, List salesReturnJsons=new LinkedList(); salesReturnJsons=salesRepository.findSales(); 二, List salesReturnJsons=salesRepository.findSales(); 因此,在这两个场景中,内存是如何分配的,在第二个场景中,调用了列表的哪个实现(LinkedList或ArrayList) 任何帮助都将不胜感激。如果在第一种情况

我想问一个非常简单的问题。初始化变量有两种方法:

一,

List salesReturnJsons=new LinkedList();
salesReturnJsons=salesRepository.findSales();
二,

List salesReturnJsons=salesRepository.findSales();
因此,在这两个场景中,内存是如何分配的,在第二个场景中,调用了
列表
的哪个实现(
LinkedList
ArrayList


任何帮助都将不胜感激。

如果在第一种情况下,第二行正好低于第一行,“新”语句将无效。创建一个空的LinkedList,在其上放置一个引用,然后将引用更改为指向另一个列表(我假设findSales返回一个列表),最后java的垃圾收集器将删除该空LinkedList,因为不再有对它的引用


在第二个场景中,您返回一个列表(如我所想),并对该列表进行引用

在这两种情况下,
salesRepository.findSales()
返回的对象都将分配给变量。由于这两种情况下的实现是相同的,在不知道实际实现的情况下,我们只能说在这两种情况下对象将属于同一类,但是,在第一个示例中,创建一个对象然后将变量重新分配给另一个引用没有什么意义。第二种方法将获得相同的结果,但工作量会减少。

这两种方案在
salesReturnJsons
变量中都会得到完全相同的列表,列表类型是由
salesRepository.findSales()返回的。从给出的代码中,我们无法判断此方法实际返回的是什么类型

唯一的区别是,第一个场景创建一个绝对不必要的空LinkedList,将其存储到
salesReturnJsons
变量中,并立即用
salesRepository.findSales()
中的列表替换它,使LinkedList成为垃圾。所以,请使用第二个版本

如果(出于任何特殊原因)您的目的可能是拥有
salesRepository.findSales()
结果的链接列表,那么您可以执行以下操作:

List<SalesReturnJson> salesReturnJsons=
    new LinkedList<SalesReturnJson>(salesRepository.findSales());
列出SalesReturnJSON=
新建LinkedList(salesRepository.findSales());
这将把方法结果中的元素复制到一个新的LinkedList中,然后确定列表类型


但是典型的代码片段是您的版本2。

方法
findSales()
返回什么
ArrayList
实例或
LinkedList
?在第一个场景中,您无缘无故创建了
LinkedList
。然后你把它扔掉。
List<SalesReturnJson> salesReturnJsons=salesRepository.findSales();
List<SalesReturnJson> salesReturnJsons=
    new LinkedList<SalesReturnJson>(salesRepository.findSales());