2011-03-18 16 views
5

在Java中有parallel arrays的真實用例嗎?維護相互關聯的N個陣列似乎太麻煩。爲什麼在Java中使用並行數組?

實施例:

int ages[] = {0,   17,  2,   52,   25}; 
String names[] = {"None", "Mike", "Billy", "Tom",  "Stan"}; 
int parent[] = {0,   3,   1,   0,   3}; 

我可以只創建一個類Person和存儲對象在一個單一的陣列。會更貴一點,但很容易使用的權利?

回答

10

並行數組是一種像Basic(原始數據)那樣沒有數組結構而非數組的數據結構。相反,您應該按照您的建議定義對象。

1

只有當您試圖表示的內容可以更好地解釋爲對象時才創建類/對象表示。

哈希映射是另一種解決方案。例如,如果名稱是唯一的,則可以使用名稱作爲鍵和年齡作爲值,而不是年齡和名稱的不同數組。

+2

地圖幾乎和平行陣列一樣糟糕。 – 2011-03-18 03:28:41

+0

@stephan:好吧,我同意,但有時,我更喜歡使用地圖,當事情很簡單:) – Sujoy 2011-03-18 05:07:49

+0

我會修改。在某些方面,地圖更糟;例如它們不可避免地比平行數組和更喜歡的方法(自定義類)更慢,更耗費內存。除了Map方法,如果你有兩個以上的屬性關聯...,在這種情況下會變得很麻煩。 – 2011-05-11 08:03:09

1

類更好,但如果用例較窄,例如一個方法體,創建一個方法是浪費的。如果您有Pair課程,則可以將其專門化,而無需創建新課程。

11

Java中並行數組的唯一真正優點是作爲(IMO極端)度量來減少對象分配和/或堆使用。對於足夠大的對象集合,3個數組將佔用更少的空間,並且使用的對象少於某個自定義類的單個數組實例。

這種方法通常是一個壞主意,因爲它會讓你的代碼更加脆弱。在大多數情況下,創建和使用自定義類是最好的方法。

+3

是的,在Android開發中需要記住這一點。並非所有的Android設備都是平等的,而手機通常資源有限。引用Android開發者參考的性能提示,''如果你需要實現一個存儲(Foo,Bar)對象元組的容器,試着記住兩個並行的Foo []和Bar []數組通常要好得多而不是單個自定義(Foo,Bar)對象的數組。「' http://developer.android.com/training/articles/perf-tips.html – loeschg 2013-01-07 14:44:15

相關問題