簡體   English   中英

list.sublist() 和 stream.limit() 的區別

[英]Differences between list.sublist() and stream.limit()

我有兩個版本的代碼截斷現有列表:

版本 1:

List<String> myList = User.getAllNames();
myList = myList.stream().sorted(sortByName).limit(5).collect(Collectors.toList());

版本 2:

List<String> myList = User.getAllNames();
myList.sort(sortByName);
myList = myList.subList(0, 5 - 1);

兩個版本都截斷myList 由於版本 2僅使用由其原始列表烘焙的subList ,因此我懷疑版本 2是否也像版本 1一樣從 java 堆(垃圾收集之后)中完全刪除剪輯的元素。

兩個版本之間有什么區別嗎?

我懷疑版本 2 是否也完全從 java 堆中刪除了裁剪的元素(在垃圾收集之后)

假設沒有其他對象引用被剪裁的元素,那么在版本 1 的情況下,它們將有資格進行垃圾回收。

在版本 2 的情況下,由於生成的子列表是原始列表的“視圖”,因此子列表需要保留對原始列表的引用,其中包含所有被剪裁的元素。 因此,那些被剪裁的元素將不符合垃圾回收的條件。

也就是說,除非您的列表有很多元素,否則這可能無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM