【问题标题】:Insert item into list, sort it and retrieve index of item after insert将项目插入列表,对其进行排序并在插入后检索项目的索引
【发布时间】:2013-11-28 14:56:17
【问题描述】:

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

是否可以通过以下方式实现:

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

我更喜欢以下场景:

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

这种新项目位置的计算是否可能?

编辑

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

【问题讨论】:

    标签: java list arraylist comparator


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我有点担心第一行的list.get(list.size())。这似乎是某种例外的秘诀。
      • list.get(list.size()) 是当插入元素超过您已经拥有的最大元素时。我有一个错误,我更正了我的答案。
      • 不,你没有更正你的答案。它仍然会引发异常。 -1.
      • 我再次检查了它(我使用整数列表),我没有看到其他错误。留下你的反对票,但显示它会在哪些数据上不正确。
      • 我想重复我的问题。你说我有一个错误,你对我投了反对票。好的我同意。但是现在请告诉我这个错误在哪里,这段代码在哪个数据集上会失败。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-02
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 2017-08-09
        相关资源
        最近更新 更多