1

前提条件:列表已经排序!

这是否可能以另一种方式而不是以下方式:

  1. 将项目添加到列表
  2. Comparator再次排序列表
  3. 项目搜索列表
  4. 返回插入项的索引

我更喜欢以下场景:

  1. 计算新项目的索引,如果它被添加到考虑的排序列表中Comparator
  2. 在此位置插入项目

这种新项目位置的计算是否可能以某种方式进行?

编辑

我应该提到,我正在使用一个外国图书馆,我只需要这个东西,以保持列表同步(在我的情况下,项目和选择状态)

4

3 回答 3

2

使用 a TreeSet,您就不必担心对集合进行排序。如果您打算多次执行此操作,则特别好。

于 2013-11-15T09:13:38.970 回答
2

如果列表已经排序,则将 Collections.binarySearch(list, element,comparator) 与用于排序的相同 Comparator 一起使用。它将返回插入位置 i。使用 list.add(i, element) 插入元素。如果 i < 0 则使用 i = -i - 1 作为插入点

于 2013-11-15T09:41:05.480 回答
0

你可以计算这个指数,但你自己。主要问题是定义 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)方法后,将添加新元素,移动下一个元素并保存列表顺序。

于 2013-11-15T09:28:28.937 回答