ArrayList.add(int index,element)似乎没有移动元素

时间:2017-08-08 19:46:05

标签: java sorting data-structures

我有很长的Card对象列表。如果用户错过了一个问题,我想要将同一类别的卡移动到下一个插槽。列表的排序方式会错开所有的cateogries,因此每个下一个问题都是不同的。

我有一个排序方法,它应该接受列表中的当前位置和下一个元素的所需类别,并将该类型元素的下一个出现位置移到当前位置之后。

我没有看到这个算法有什么问题所以我认为我使用ArrayList方法可能是错误的。但是,在查看文档后,它们似乎应该按预期工作。

我测试了列表,因为它被认为已经排序并且没有任何移动,但列表确实包含了我正在寻找的类别。

public static void sortCategoryToNext(ArrayList<Card> cardlist,String cat,int currentIndex){
           boolean sorted = false;
           int i = currentIndex;
           int insertionpoint = i;
            do {
                i++;
                Card nextCard = cardlist.get(i);
                if(nextCard.getCategory().equals(cat)){
                    sorted = true;
                    cardlist.add(insertionpoint,nextCard);
                    cardlist.remove(nextCard);
                }

           }while(!sorted);
        }

1 个答案:

答案 0 :(得分:2)

ArrayList.remove(Object)删除对象的第一个次出现,该对象位于您刚刚插入该对象的列表位置。

而不是:

                cardlist.add(insertionpoint,nextCard);
                cardlist.remove(nextCard);

试试这个:

                cardlist.remove(i);
                cardlist.add(insertionpoint,nextCard);

作为一项改进,上面的代码也使用了ArrayList.remove(int),它应该更有效率,因为它不必遍历列表来查找匹配项。