ArrayList 和LinkedList的排序问题

两者的排序本身的结构决定的:

Java SE提供的LinkedList其实是一种双向链表,每个节点都保存上一个和下一个节点的地址。双向链表就像火车和火车的各节车厢。在插入时,把新车厢的前后固定点在原来的2个环的连接点之间简单对接上。而删除时,拿掉一节车厢,直接把前一节和后一节首尾相连。所以仅对连接点操作,效率非常快。只需一次。查找时,就需要从火车头顺序‘逐个’找到车尾,这种逐个检查所以查找效率不佳。

ArrayList使用的是‘连续’(不是有序)的内存空间。每个单元的大小和位置可以用简单的四则运算计算出来,比如每个节点占4bytes,存20个节点,就需要4*20=80bytes,第3个节点在4*3=第12个byte位置。由于可以计算准确位置,这种结构在'随机存取操作'上很快,可以直接查第3个节点,就是第12个byte位置, a[3]或a.get(3)就返回第12byte位置起的数据代表的对象。这种随机操作的便捷就是应用意义上的查找便捷。在新增和删除操作中,由于是连续空间,插入数据需要对前后数据进行大块的整体搬移,空间不够时也需要整体扩容,删除后空间闲置需要整体回收。所以在删除新增操作上性能不佳。

猜你喜欢

转载自blog.csdn.net/zhaohefeijava/article/details/19612655
今日推荐