2010-11-30 46 views
2

避免Android開發者文檔中創建對象Designing for Performance頁面部分我看了一些段落對此我無法想象一個代碼表示:「的性能設計」在Android開發者網站上的文檔問題的

整數的陣列比整數數組好得多,但是這也可以推廣到一個事實,即整數的兩個平行的陣列也有很多比(INT,INT)對象的數組更有效。任何原始類型的組合也是如此。

  • 這些「並行數組」的外觀如何?會不會像getData()這樣的具有簽名的方法:int [] []返回
     
        [a][b] 
        [c][d] 
        [e][f] 
    
    ...最好是有兩個方法,每個方法返回一個'列'數據?如: getFirstDimensionData():INT []
     
        [a] 
        [c] 
        [e] 
    
    和第二個getSecondDimensionData():INT []
     
        [b] 
        [d] 
        [f] 
    
  • 什麼是「(INT,INT)對象數組? ...類似於a-type-not-defined的對象數組,它有兩個int成員實例定義其狀態?

的立即下段:

如果您需要實現存儲(美孚,酒吧)對象的元組的容器,儘量要記住,兩個平行的Foo []和酒吧[]數組一般比單個自定義(Foo,Bar)對象陣列好得多。

...讓我覺得,作者是彌補某種記號。我猜我的關鍵問題是:是否使用這種(somethingX, somethingY)表示法的頁面的作者引用了一個任意的類來「包裝」括號內的元素?

最後,這是一個標準的符號或只是一些由自己創造,並省略了頁面的作者解釋?

請問任何人,請說明一下嗎? :)

由於提前,

Ÿ

回答

2

他們是怎麼說的是,

class foo { 
    int a; 
    int b; 
} 

foo[] bar; 

慢於

int[] foo; 

隨着foo[row*2]afoo[row*2+1]b

符號(foo,bar)試圖表示包含foobar(如我上面示例中的(a,b))的類。

我不相信這是一個標準的符號,但它不會是我第一次被證明是錯誤的。

+0

不錯。我想這就是軟件架構和文檔書籍告訴你的原因之一,如果你使用了不標準的東西,你應該在你的文檔附近放置一個圖例。 ;) – Ytsejammer 2010-11-30 04:45:04

+0

哎呀!在我說感謝之前,我敲了回車鍵併發送了我的評論!好吧,謝謝你的閃電響應:) – Ytsejammer 2010-11-30 04:45:56

0

該文件的作者正在使用一種鬆散的數學符號。 (x,y,z)是元組在數學中表示的方式。 (這也正是Python使用這種表示法的情況,並且考慮到這個文檔來自Google,作者能夠流利地使用Python的可能性相當高,但是Python沒有發明符號。)

EboMike提到的方法可能同樣有效,但它不完全是文檔所討論的內容。該文檔正在討論並行陣列,這是一種方法,您可以使用n數組來代替具有n字段的記錄/結構體/元組/對象的單個數組。

更具體地說,它是說,如果你想「的容器存儲(美孚,酒吧)對象的元組」,就像這樣:

class FooBar { 
    Foo foo; 
    Bar bar; 
} 
... 
FooBar[] array = new FooBar[n]; 

你也可以使用「兩個平行的Foo []和酒吧[]數組」,像這樣:

Foo[] foos = new Foo[n]; 
    Bar[] bars = new Foo[n]; 

這意味着,只要你會說array[x].foo你會說現在foos[x]

對於並行數組,垃圾回收器只需處理2 + 2 * n個對象(2個數組,n個Foos和n個Bars)而不是1 + 3 * n個對象(1個數組,n個FooBars,n個Foos和n酒吧)。所以n越大,差異越顯着。

缺點是你不能輕易地將Foo和Bar放在一起,這可能會讓代碼的意圖不太清晰。