java – 我们如何优化ArrayList上的插入?

事实上,这是几天前提出的一个面试问题.

面试官希望我表达ArrayList和LinkedList之间的区别,并要求优化ArrayList上的插入操作,换句话说,重新实现add(int index,E element),当然还有get(int index)的复杂性操作可以牺牲.

我的答案是将数组分成k个子数组并更新一个计数数组,表示相应子数组中已有的元素数.并且每个子数组的内存都以预期的初始大小动态分配.当我需要将数据插入ArrayList时,我可以先找到一个子数组,然后在一个小数组中进行操作.
如果插入不是太频繁或索引是均匀分布的,插入的时间复杂度平均可以是O(log(k)n / kk),其中log(k)意味着我们应该首先用二进制定位子数组在计数数组的和数组上搜索,n / k用于数据移动或甚至是存储器重新分配,k代表和数组的更新.

我相信有更好的解决方案.我确实需要一些建议,谢谢!

解决方法

其中一个解决方案可能是:

> add(int index,E element)总是将元素添加到数组的末尾(你还必须存储应该添加这个元素的索引) – 复杂度O(1)> get(int index)必须恢复数组的正确顺序(如果在最后一次调用后添加了一些元素) – 知道每个元素应该在的位置,你可以在O(n)中恢复正确的顺序

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...