簡體   English   中英

幫助選擇正確的數據結構

[英]Help choosing the right data structure

我需要一個具有以下要求的數據結構:

  1. 需要能夠通過索引獲取元素(如List)。
  2. 我將始終只添加/刪除結構末尾的元素。

我傾向於使用ArrayList 在這種情況下,似乎是O(1)都讀取元素(它們總是?),刪除元素(我只需要在列表的末尾刪除它們)並添加(我只添加到結尾名單)。

只有一個問題是,當ArrayList完全填滿並且我需要向它添加更多元素時,ArrayList會不時地產生性能損失。

還有其他更好的主意嗎? 我不認為這里的數據結構超過了ArrayList

謝謝

聽起來不錯,但在C#中你應該使用List<T> 它是ArrayList<E>的Java等價物。 C#中的ArrayList類不是通用的,並且基本上被新的List<T>類廢棄了。

只有一個問題是,當ArrayList完全填滿並且我需要添加更多元素時,它會不時地產生性能損失。

這可能不會是一個問題,你可能不應該擔心它,除非你的性能分析。 但是,如果您事先知道(或可以猜測)列表將包含的元素數量,則可以將其Capacity設置為該值(使用Java中的ensureCapacity )。 這將使列表提前保留所需的內存。 您還可以使用兩種 語言為列表構造函數提供容量。

使用ArrayList。

當你正確地說它達到容量限制時,它會動態調整大小。 然而,這應該不是問題,因為它使用足夠聰明的算法,即每個附加操作的平均成本仍然只是O(1)。

始終使用List<T>而不是ArrayList

實際上添加可能更多是O(N),因為當數組超過分配限制時必須重新分配和復制數組。 Javadocs指定它以O(N)的攤銷成本增長,無論這意味着什么,正如我所期望的那樣O(NlogN),但顯然他們擁有比我所知的更智能的算法。

如果在施工時分配足夠的元素來包含完整的集合,則為O(1)。

請參閱: http//java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html

您需要平衡讀取訪問的相對頻率與對List<T>寫入訪問權限。 必須注意的是,對於大多數用途,您不太可能注意到調整ArrayList<T>的大小

但是,如果你在最后添加和刪除一個項目,那么你所說的比通過索引獲取項目更多(基本上使用List作為堆棧隊列 ),你的探查器會告訴你ArrayList<T>是你的位置性能瓶頸是,你應該考慮使用LinkedList<T> ,它只是用於這種用法。

暫無
暫無

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

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