哪个更好?

时间:2013-09-27 06:59:59

标签: java android performance

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

  1. 包含值包含v1和v2的字符串的Hashmap,并在选择后使用split()来检索正确的值。
  2. 包含两个字符串变量数组的值的Hashmap
  3. 我正在创建一个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
        }
    }
    

4 个答案:

答案 0 :(得分: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;
  } 
}

当然,你可以做得更好,有访问者等等。

答案 1 :(得分:1)

我认为分割函数以O(字符串大小)复杂度运行但是数组的到达元素是常量

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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