我有很长的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);
}
答案 0 :(得分:2)
ArrayList.remove(Object)删除对象的第一个次出现,该对象位于您刚刚插入该对象的列表位置。
而不是:
cardlist.add(insertionpoint,nextCard);
cardlist.remove(nextCard);
试试这个:
cardlist.remove(i);
cardlist.add(insertionpoint,nextCard);
作为一项改进,上面的代码也使用了ArrayList.remove(int),它应该更有效率,因为它不必遍历列表来查找匹配项。