簡體   English   中英

番石榴表與2D數組

[英]Guava Table vs. 2D array

如果我事先知道數組的大小,那么使用Guava Table實現和2D數組有什么區別?

一個比另一個更有效嗎? 怎么樣? 它會影響運行時間嗎?

最明顯和最關鍵的區別是數組始終使用int s進行索引,而Table可以使用任意對象進行索引。

考慮Guava站點的表示例

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
...

這里的索引通過Vertex對象發生。 如果你想對數組做同樣的事情,你必須在Vertex類中添加一些getIndex方法,並像這樣訪問數組

double array[][] = new double[4][5];
array[v1.getIndex()][v2.getIndex()] = 4;

這是不方便的,特別是難以維護 - 尤其是當索引可能發生變化時(或者必須添加/刪除頂點時,盡管您提到這不是您的情況)。

此外,Guava表允許獲取作為單獨的實體。 在2D數組中,您始終可以訪問數組的一行或一 - 具體取決於您如何解釋數組的2維。 該表允許以Map形式訪問兩者。


關於性能:有將是你將有性能上的差異noticable案件。 特別是當你有一個基本類型的大型 2D數組( intdouble等)時,替代方案將是一個具有相應引用類型的大表( IntegerDouble等)。 但同樣,當數組/表非常大時,這只會是顯而易見的。

除了Marco13所說的,請閱讀: https ://stackoverflow.com/a/6105705/1273080。

基本上每種可以想象的方式,集合都比對象數組更好。

這同樣適用於此。 當您需要一些基本的高性能結構時,2D數組是一個低級工具。 但是,數組沒有有意義的方法,沒有行為,沒有任何內容,因此通常是類中的底層數據結構,它們會為它們添加一些行為。 使用2D固定大小的數組執行此操作,您最終會得到...一張番石榴Table

此外, Table可以是2D數組,也可以是Map<R, Map<C, V>> ,將來我們也可能具有可調整大小的Table實現 - 所有這些都在一個接口內。

關於性能 - 你應該總是采用更高級的方法來使代碼盡可能可讀和清晰,然后測量性能,只有在問題出現時才采用不同的方法。

暫無
暫無

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

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