我从A
班上返回一份清单.我想从列表中删除第一个元素,并将其作为最后一个元素添加到同一列表中.我是这样做的.
myList.add(myList.get(0)); myList.remove(0);
目标硬件是Android OS.我应该A
以一种它返回的方式编写我的类ArrayList
,或者LinkedList
?哪种情况对以下情况更好:
myList总是有100个元素
myList总是有10个元素
也许我看到一个没有问题的问题.你认为在这种情况下我不应该关心性能,因为问题的大小(对于1和2都很小)?
我知道"过早优化是万恶之源"的说法.这就是为什么我在改变我的实现之前犹豫不决(现在,我的A
对象返回一个ArrayList).
LinkedList
如果你经常添加/删除/更新元素,你应该采用简短的答案,特别是对于第一个/最后一个元素的情况,因为它包含指向第一个和最后一个节点的指针
长答案 LinkedList
添加方法提供O(1)
性能,而ArrayList O(n)
在最坏的情况下给出.
LinkedList
是比较快的.它只会引用节点,因此第一个节点消失:
另外,ArrayList
对于一次写入多次读取或追加者来说是好的,但是从前面或中间添加/删除是不好的.
例如,从链表中删除元素会产生成本O(1)
,同时对数组(数组列表)成本也是如此O(n)
.
但是,这并不总是一个规则,正如bigoh帖子所述:
Big-oh表示法可以提供关于大量数据的性能的非常好的想法,但唯一真正知道的方法是实际尝试使用大型数据集.可能存在性能问题,这些问题没有被大写符号考虑,例如,随着虚拟内存使用量的增长,对分页的影响也会增加.虽然基准测试更好,但在设计过程中它们并不可行,因此Big-Oh复杂性分析是首选.
以上内容经过这篇文章的验证,其中LinkedList
也证明了这一点.
最后,根据javaconceptoftheday.com,请进一步/将来参考,请查看它们的用例比较:
参考
http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html
http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList. HTML