Java 如何保持列表不分段(阅读说明)
我有以下问题(例如简化) 我有项由其ID标识Java 如何保持列表不分段(阅读说明),java,android,algorithm,optimization,Java,Android,Algorithm,Optimization,我有以下问题(例如简化) 我有项由其ID标识 class Item { private int id; public int getId(){ return id; } } 我想将它们保存在一个类中(命名为ItemGroup),并满足以下条件: ItemGroup.getItems()应返回一个列表(列表不必按项目id排序) 每次我向ItemGroup添加一个新项目时,它应该只维护具有较高且连续的ID的项目。一些例子可以更好地解释这一点: 现有项=[5,6],
class Item {
private int id;
public int getId(){
return id;
}
}
我想将它们保存在一个类中(命名为ItemGroup),并满足以下条件:
应返回一个ItemGroup.getItems()
(列表不必按项目id排序)列表
- 每次我向
添加一个新项目时,它应该只维护具有较高且连续的ID的项目。一些例子可以更好地解释这一点:ItemGroup
- 现有项=[5,6],项添加=[7,8],结果=[5,6,7,8]
- 现有项=[5,6],项添加=[8,9],结果=[8,9]
- 现有项=[5,6],项添加=[3,4],结果=[3,4,5,6]
- 现有项=[5,6],项添加=[1,2],结果=[5,6]
列表
,每次添加新项目(或项目组)时运行Collections.sort()。然后按递减方式迭代列表,当我检测到ID跳转时,丢弃其余项目getItems()
返回new ArrayList(树集)
列表
,每次需要插入项目时,通过二进制搜索查找正确的位置,在那里插入项目,然后对列表进行碎片整理。在getItems()方法中返回未修改的列表。
方法谢谢从我假设的示例来看,我不确定您的ID是否唯一。我还假设插入列表和主列表最初都有相应的元素 如果是这样,算法将很简单:
该算法具有O(n)的最佳案例性能(O(1)用于值比较,O(n)用于元素插入),只要列表中没有任何混乱,并且始终对其进行排序,则始终可以实现该性能。添加的项和现有项是否可以相交(即将[2,3]添加到[3,4])?否,项是唯一的=)。谢谢你的回答