前提条件:列表已经排序!
这是否可能以另一种方式而不是以下方式:
- 将项目添加到列表
Comparator
再次排序列表- 项目搜索列表
- 返回插入项的索引
我更喜欢以下场景:
- 计算新项目的索引,如果它被添加到考虑的排序列表中
Comparator
- 在此位置插入项目
这种新项目位置的计算是否可能以某种方式进行?
编辑
我应该提到,我正在使用一个外国图书馆,我只需要这个东西,以保持列表同步(在我的情况下,项目和选择状态)
前提条件:列表已经排序!
这是否可能以另一种方式而不是以下方式:
Comparator
再次排序列表我更喜欢以下场景:
Comparator
这种新项目位置的计算是否可能以某种方式进行?
编辑
我应该提到,我正在使用一个外国图书馆,我只需要这个东西,以保持列表同步(在我的情况下,项目和选择状态)
使用 a TreeSet
,您就不必担心对集合进行排序。如果您打算多次执行此操作,则特别好。
如果列表已经排序,则将 Collections.binarySearch(list, element,comparator) 与用于排序的相同 Comparator 一起使用。它将返回插入位置 i。使用 list.add(i, element) 插入元素。如果 i < 0 则使用 i = -i - 1 作为插入点
你可以计算这个指数,但你自己。主要问题是定义 moreThan() 操作(例如我假设你有升序)。i 是你想知道的索引。
if(insertedElement.moreThan(list.get(list.size()-1))){
i = list.size();
}else{
for(i=0; i<list.size(); i++){
if(list.get(i).moreThan(insertedElement)){
break;
}
}
}
使用该add(index, element)
方法后,将添加新元素,移动下一个元素并保存列表顺序。