2017-09-20 19 views
-1

我有一個很簡單的問題,我想問一下。有通過初始化變量2種方式:在不同場景中的列表實現

1.

List<SalesReturnJson> salesReturnJsons=new LinkedList<>(); 
salesReturnJsons=salesRepository.findSales(); 

2.

List<SalesReturnJson> salesReturnJsons=salesRepository.findSales(); 

所以在這2個scenerios是如何分配的內存,並在第二之情況,其實施(LinkedListArrayListList被調用。

任何幫助將不勝感激。

+0

方法findSales()返回什麼? 'ArrayList'實例或'LinkedList'? –

+0

在第一種情況下,你無緣無故地創建了一個LinkedList。然後你把它扔掉。 – Kayaman

回答

1

如果在第一種情況下第二行恰好低於第一行,則「新」語句將不起作用。你創建一個空的LinkedList,在其上添加引用,然後將引用更改爲指向另一個List(我想findSales返回一個List),最後java的垃圾收集器將刪除空的LinkedList,因爲沒有引用它了。

在第二種情況下,您返回一個列表(如我所想)並將對此列表的引用。

0

在這兩種情況下,由salesRepository.findSales()返回的對象都將分配給您的變量。因爲在這兩種情況下實現都是相同的,所以在不知道實際實現的情況下,我們只能說在兩種情況下對象都是同一個類,然而,創建一個對象然後將該變量重新分配給另一個引用第一個例子沒什麼意義。第二個將達到相同的結果,但是努力減少。

0

這兩種情況都以您的salesReturnJsons變量中的完全相同的列表結尾,其中List類型是由salesRepository.findSales()返回的列表類型。從給出的代碼中,我們無法確定該方法實際返回的是哪種類型。

唯一不同的是,第一個場景創建一個完全不必要的空鏈表,並將其存儲到你的salesReturnJsons變量,通過清單從salesRepository.findSales()立即替換它,使得LinkedList的垃圾。所以,請使用第二個版本。

如果(出於任何特殊原因)你的意圖可能是有salesRepository.findSales()結果的一個LinkedList,那麼你可以做:

List<SalesReturnJson> salesReturnJsons= 
    new LinkedList<SalesReturnJson>(salesRepository.findSales()); 

將從方法結果的元素複製到一個新的鏈表,那麼你確定List類型。

但是,典型的代碼片段將是您的版本2.