[英]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數組( int
, double
等)時,替代方案將是一個具有相應引用類型的大表( Integer
, Double
等)。 但同樣,當數組/表非常大時,這只會是顯而易見的。
除了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.