簡體   English   中英

Dart 中的 DoubleLinkedQueue 和 ListQueue 有什么區別?

[英]What's the difference between a DoubleLinkedQueue and a ListQueue in Dart?

Dart 核心 API 有兩個實現Queue<E>接口的類, DoubleLinkedQueue<E>ListQueue<E>

這兩個類的文檔幾乎相同,唯一明確提到的區別是ListQueue<E>文檔中的以下注釋:

removeAllremoveWhere這樣的操作效率很低。 如果需要這些,請改用DoubleLinkedQueue

它們在實現方面的實際區別是什么,什么時候應該使用哪個實現?

DoubleLinkedQueue基本上是一個在雙向鏈表之上實現的隊列。 這意味着刪除其中任意位置的元素很快,因為它只需要調整指針。

ListQueue是在 List 之上實現的。 第一個和最后一個是列表中的索引。 一般來說,這是更有效的實現,因為它比雙鏈表具有更少的內存開銷。

你可以在這里看到這兩種實現

大多數時候你想使用ListQueue 出於這個原因, Queue接口默認為 ListQueue (即Queue()返回一個ListQueue )。

如果您需要有選擇地刪除隊列內的元素,則DoubleLinkedQueue實現最有用。 這是一種相對罕見的情況,該類在 dart 庫中的DoubleLinkedQueueDoubleLinkedQueue存在於ListQueue之前。 因為我們已經有了DoubleLinkedQueue我們保留了它。 如果我們從 ListQueue 開始,我們可能不會添加DoubleLinkedQueue

暫無
暫無

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

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