Android 面试题(只说结果,适当的情况下附源码)

148 阅读1分钟
1. 一个数组插入删除查找和链表的效率对比

考察点:ArrayListLinkedList 两者之间插入删除查询的区别
1. ArrayList:数组形式的集合

  插入/删除:在下标为 index 的地方,复制( for 循环得到一个数组) index 以后的数组,然后将数据插入/删除节点;

  查询:根据下标查询。

2. LinkedList:链表形式的集合

  插入/删除:将上一个节点的 next 指向新加入的节点,然后将新加入节点的 next 指向被截取的第一个节点,删除也是同理,不存在 for 循环操作;

  查询:沿着链表轮训查找。

总结:相对于插入/删除来说,链表(LinkedList)效率更高;查询的话,数组(ArrayList)效率最高。

2. 如果一个数组要反复插入删除,如何优化

《JVM 标记整理算法》

类似于 Java 标机回收算法,将删除的节点数据替换为 null,等需要插入的时候在将 null替换为对应的数据,最后删除对应的 null