2013-09-27 117 views
1

我需要維護一個包含兩個字符串類型值的列表say v1,v2,每個關鍵字說k。 什麼是更好的選擇哪個更好?

  1. 的Hashmap含含v1和v2的字符串,並採用分體式()以檢索後選擇正確值的值。
  2. 的Hashmap有兩個字符串變量

我創建Android應用程序包含數組值,所以只對性能的關注。在第二種情況下,我可以直接訪問,但每個值將包含另一個數組(我不知道,但它看起來像一個複雜的方式),而在第一種情況下,它將使用每個訪問像v.split(「,」)[0 ]

請指導我。

Map<String,String[]> listMap= new HashMap<String, String[]>(); 
Map<String,String> listMap1= new HashMap<String, String>();; 

for (int i = 1; i < tl.getChildCount(); i++) { 
    TableRow row = (TableRow) tl.getChildAt(i); 
    COLOR_TABLE clr = (COLOR_TABLE) row.getTag(); 

    if (clr == COLOR_TABLE.green) { 
     //comp 
     String x1=listMap1.get(((TextView) row.getChildAt(0)).getText()); 
     String x2=listMap.get(((TextView) row.getChildAt(0)).getText()); 
     // now i have to add two string values in a list seperately 
    } 
} 
+0

你能提供一些代碼作爲實現的例子嗎? – Rogue

+1

任何你不想在v1和v2中使用簡單對象的理由? –

+0

我已經添加了我想要的代碼 – HimanshuR

回答

5

永不濫用字符串!有時它可能很慢,而且它們不是爲此目的而製造的。

public class Pair<A, B> { 

    public A first; 
    public B second; 

    public Pair(A first, B second) { 
    this.first = first; 
    this.second = second; 
    } 
} 

當然,你可以做的更好,與存取等:

,如果你想這樣做更多地是面向對象,您可以使用一個通用的Pair類。

+0

爲什麼泛型類當我知道我只有一些字符串 – HimanshuR

+0

得到它的使用,這是真的,你只有弦現在.....但明天?????? 。可重用性! – luiso1979

+0

由於upvotes接受了此答案,現在將使用泛型類 – HimanshuR

1

我認爲分裂函數O(串大小)的複雜性運行,但達到的陣列的元件是恆定

1

字符串會比陣列慢得多,並且還具有更復雜的代碼。 (需要注意的是,在實際測量之前很難確定性能差異。)

但是,如果是我,我會使用最簡單的解決方案,並使用一個對象。後來,如果程序太慢了,測量顯示這是一個性能瓶頸,我會考慮其他解決方案。

0

從設計角度看,使用數組或自定義類作爲值是首選方法。如果將兩個字符串打包爲一個由字符分隔的字符串,則需要確保第一個字符串不會包含該字符,或者必須使用某種轉義機制才能包含該字符。

如果你只是擔心性能測試的所有選項,並選擇最好的一個。很難做出預測,因爲結果將取決於您存儲的數據以及庫的實施方式。例如,存儲對獨立字符串的引用的任何結構都可能遭遇緩存未命中訪問;如果字符串拆分或類似的方法比緩存缺失更便宜,它會更快。