1

我需要维护一个列表,其中包含两个字符串类型的值,比如 v1,v2,每个键比如 k。什么是更好的选择

  1. Hashmap 的值包含一个包含 v1 和 v2 的字符串,并在选择后使用 split() 检索正​​确的值。
  2. Hashmap,其值包含两个字符串变量的数组

我正在创建一个 android 应用程序,所以只关心性能。在第二种情况下,我可以直接访问,但每个值将包含另一个数组(我不知道,但它看起来像一个复杂的方式),而在第一种情况下,它将在每次访问时使用 split 函数,如 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
    }
}
4

4 回答 4

5

永远不要滥用字符串!有时它可能很慢,它们不是为此目的而制造的。

如果您想更面向对象,可以使用通用 Pair 类:

public class Pair<A, B> {

  public A first;
  public B second;

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

当然,您可以使用访问器等做得更好。

于 2013-09-27T07:08:23.583 回答
1

字符串会比数组慢得多,而且代码也更复杂。(需要注意的是,在实际测量之前很难确定性能差异。)

但如果是我,我会使用最简单的解决方案,并使用一个对象。后来,如果程序变得太慢,并且测量表明这是一个性能瓶颈,我会考虑其他解决方案。

于 2013-09-27T07:07:09.737 回答
1

i think split function runs with O(string size) complexity but reach element of an array is a constant

于 2013-09-27T07:05:40.040 回答
0

从设计的角度来看,使用数组或自定义类作为值将是首选方法。如果您将两个字符串打包成一个由一个字符分隔的字符串,您需要确保第一个字符串永远不会包含相同的字符,或者您必须使用某种转义机制才能包含它。

如果您只担心性能测试所有选项并选择最好的一个。很难做出预测,因为结果将取决于您存储的数据以及库的实施方式。例如,任何存储对独立字符串的引用的结构都可能在访问时遭受缓存未命中;如果字符串拆分或类似方法被证明比缓存未命中更便宜,那么它会更快。

于 2013-09-27T07:09:34.650 回答