特定android示例

时间:2015-12-28 08:53:35

标签: java android performance arraylist linked-list

我从A课程返回一个列表。我想从列表中删除第一个元素,并将其作为最后一个元素添加到同一列表中。我是这样做的。

myList.add(myList.get(0));
myList.remove(0);

目标硬件是Android OS。我是否应该以返回AArrayList的方式对我的LinkedList课进行编码?哪种情况对以下情况更好:

  1. myList始终有100个元素

  2. myList总是有10个元素

  3. 也许我发现没有问题的地方。你觉得在这种情况下我不应该关心性能吗,因为问题的大小(对于1和2都很小)?

    我知道这句话"过早的优化是所有邪恶的根源"。这就是为什么我在改变我的实现之前犹豫不决(现在,我的A对象返回一个ArrayList)。

1 个答案:

答案 0 :(得分:10)

简短回答如果您经常添加/删除/更新元素,则应选择LinkedList,尤其是对于第一个/最后一个元素的情况,因为它包含指向第一个元素的指针和最后一个节点

长答案 LinkedList add方法提供O(1)性能,而ArrayList在最坏的情况下提供O(n)LinkedList更快。它只会引用节点,所以第一个节点消失:


此外,ArrayList适用于一次性写入多次读取或追加者,但在前面或中间添加/删除时效果不佳。

enter image description here

例如,从链接列表中删除元素需花费O(1),而对数组(数组列表)执行此操作需要花费O(n)

但是,这并不总是一个规则,因为bigoh帖子声明:

  

Big-oh表示法可以提供关于大量数据的性能的非常好的想法,但唯一真正知道的方法是实际尝试使用大型数据集。可能存在性能问题,这些问题没有被大哦表示法考虑,例如,随着虚拟内存使用量的增加对分页的影响。虽然基准测试更好,但在设计过程中它们并不可行,因此Big-Oh复杂性分析是首选。

上述内容经过this帖子验证,其中LinkedList也证明效果缓慢。

最后,为了进一步/将来参考,请根据javaconceptoftheday.com查看它们的用例比较:enter image description here

参考
http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html