循环效率比较

时间:2012-03-13 03:14:12

标签: android performance loops arraylist

哪一项效率更高? :

ArrayList<Integer> list = new ArrayList<Integer>();
for(int a : list){
   log.i(tag, a + "");
}

SparseIntArray list2 = new SparseIntArray();
int count = list2.size();
for(int j = 0; j < count; j++) {
   log.i(tag, list2.get(j) + "");
}

或者,是否有更快的方式来阅读列表的内容?

3 个答案:

答案 0 :(得分:15)

在这种情况下,效率是无关紧要的,因为这两者完全不同。

我认为你意识到你的ArrayList示例遍历了数组列表的所有元素。

你没有意识到你的SparseIntArray示例遍历稀疏整数数组的所有元素,因为稀疏整数的键-array not 范围从零到数组大小减去一。相反,它的键是任意整数。与HashMap<Integer, Integer>一样,稀疏整数数组与接口一样具有ArrayList<Integer>

(顺便说一句,这与软件设计的一般规则有关:您的代码正确高效更好。您可以始终采取正确的方法,清理代码并找到提高其性能的方法;但是很难采用快速,错误的代码并找到使其正确的方法。)

答案 1 :(得分:2)

当你因为其他原因不需要索引变量时,像你的第一个例子那样的每个循环几乎总是更可取。

编辑:ArrayLists将比SparseIntArray更有效地迭代(在您的示例中,重复调用“get”),因为查找是恒定时间而不是对数时间。这将取决于您的用例 - 如果您的密钥稀疏,那么SparseIntArray将为您节省大量内存空间。

我想指出SparseIntArray可以在标记中有间隙,这意味着循环遍历0和Size之间的每个值不仅效率低,而且每个丢失的索引也会返回0,这可能不是你想要的行为

答案 2 :(得分:2)

SparseIntArrays 将整数映射到整数。与正常的整数数组不同,指数可能存在差距。它旨在比使用HashMap将整数映射到整数更有效。

Read More