Java 将项目插入列表,对其进行排序,并在插入后检索项目的索引

Java 将项目插入列表,对其进行排序,并在插入后检索项目的索引,java,list,arraylist,comparator,Java,List,Arraylist,Comparator,前提条件:列表已排序 这是否可能通过以下方式实现: 将项目添加到列表中 再次使用比较器对列表进行排序 项目的搜索列表 插入项的返回索引 我更喜欢以下场景: 如果新项目被添加到排序列表中,则在考虑比较器的情况下计算新项目的索引 在此位置插入项目 新项目位置的计算是否可能 编辑 我应该提到的是,我正在使用一个外部库,我只需要这个东西,来保持列表的同步(在我的例子中是项目和选择状态)使用树集,你就不必担心对集合进行排序了。如果您打算多次执行此操作,则效果更佳。使用树集,您就不必担心对集合进行排序。如果

前提条件:列表已排序

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

  • 将项目添加到列表中
  • 再次使用
    比较器对列表进行排序
  • 项目的搜索列表
  • 插入项的返回索引
  • 我更喜欢以下场景:

  • 如果新项目被添加到排序列表中,则在考虑
    比较器的情况下计算新项目的索引
  • 在此位置插入项目
  • 新项目位置的计算是否可能

    编辑


    我应该提到的是,我正在使用一个外部库,我只需要这个东西,来保持列表的同步(在我的例子中是项目和选择状态)

    使用
    树集
    ,你就不必担心对集合进行排序了。如果您打算多次执行此操作,则效果更佳。

    使用
    树集,您就不必担心对集合进行排序。如果你打算多次这样做,那就特别好。

    你可以计算这个指数,但你自己可以。主要问题是定义moreThan()操作(在示例中,我假设您有升序)。我是你想知道的索引

    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;
                    }
                }
     }
    
    if(insertedElement.moreThan(list.get(list.size()-1))){
    i=list.size();
    }否则{
    
    对于(i=0;i您可以计算此索引,但您可以自己计算。主要问题是定义多个()操作(在示例中,我假设您有升序)。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;
                    }
                }
     }
    
    if(insertedElement.moreThan(list.get(list.size()-1))){
    i=list.size();
    }否则{
    
    对于(i=0;i如果列表已排序,则使用Collections.binarySearch(列表、元素、比较器)和用于排序的相同比较器。它将返回插入位置i。使用列表插入元素。添加(i、元素)。如果i<0,则使用i=-i-1作为插入点

    如果列表已排序,则使用Collections.binarySearch(列表、元素、比较器)和用于排序的相同比较器。它将返回插入位置i。使用列表插入元素。添加(i、元素)。如果i<0,则使用i=-i-1作为插入点

    我有点担心第一行中的
    list.get(list.size())
    。这似乎是某种异常的处方。list.get(list.size())当插入的元素多于您已经拥有的最大元素时。我有一个错误,我更正了我的答案。不,您没有更正答案。它仍然引发异常。-1.我再次检查了它(我使用整数列表)我没有看到其他错误。请留下你的否决票,但显示它在哪些数据上工作不正确。我想重复我的问题。你说我有一个错误,你否决了我。好的,我同意。但是现在请告诉我这个错误在哪里,代码将在哪个数据集上失败。我有点担心
    list.get(list.size())
    在第一行。这似乎是某种异常的原因。list.get(list.size())是插入的元素超过了您已经拥有的最大元素。我犯了一个错误,我更正了我的答案。不,您还没有更正答案。它仍然抛出异常。-1.我再次检查了它(我使用整数列表)我没有看到其他错误。保留你的否决票,但显示它在哪些数据上工作不正确。我想重复我的问题。你说我有一个错误,你否决了我。好的,我同意。但是现在请告诉我这个错误在哪里,代码将在哪个数据集上失败。