【问题标题】:android-sorting of list is not working列表的android排序不起作用
【发布时间】:2011-11-08 11:44:08
【问题描述】:

我有一个名为 taskSubList 的列表,它由 object 组成。我需要根据 iscompleted 函数对任务进行排序。但是列表没有被排序。我的代码是:

if(taskSubList.size()!=0)
    {
        for(int position=0;position<taskSubList.size();position++)
        {
            if(taskSubList.get(position).isCompleted()==1)
            {
                Task taskItem = taskSubList.get(position);
                for (int i = position + 1; i < taskSubList.size();i++) {
                    Task taskItem1 = taskSubList.get(i);
                    taskSubList.set(i-1, taskItem1);
                }
            taskSubList.set(taskSubList.size()-1, taskItem);


            }
        }
    }   

【问题讨论】:

标签: java android sorting collections


【解决方案1】:

如果您尝试自己实现排序,这是一个很好的练习,但为什么不使用Collections.sort()

【讨论】:

  • 谢谢。但我想在 Lists 上做一些练习。这就是为什么我不使用 Collections.sort();
【解决方案2】:

您的排序算法有错误。当您将completed 元素移动到列表末尾时,当前元素(索引为position)被下一个元素(来自position+1)替换。但是在第一次的下一次迭代中,position 会递增,因此您没有处理新元素(来自position+1)。

例如列表:

(1 完成)(2 完成)(3 未完成)

第一次迭代后,您将拥有:

(2 个完成)(3 个未完成)(1 个完成)

但下一次迭代将从元素 (3 incomplete) 开始,而元素 (2 completed) 将被遗漏。

【讨论】:

    【解决方案3】:

    我会告诉你我在你的算法中发现的缺陷......,假设你的第一个 2 个元素已经完成,并且你正在向右移动......在第一个循环之后,第二个元素来到第一个位置,你不是再次检查..所以它将保持未排序..

    尝试使用以下算法...

    if(taskSubList.size()!=0)
        {
            int completedCount = taskSubList.size() - 1;
            for(int position=0;position<taskSubList.size();position++)
            {
                if (position >= completedCount - 1) 
                   break;
                if(taskSubList.get(position).isCompleted()==1) {
                   // swap elements in position and completedCount
                   completedCount--;
                   position --;
                } 
            }
        }
    

    【讨论】:

      【解决方案4】:

      现在这段代码可以工作了!!。

      if(taskSubList.size()!=0)
          {
              for(int position=0;position<taskSubList.size();position++)
              {
                  if(taskSubList.get(position).isCompleted()==1)
                  {
                      for(int i=position+1;i<taskSubList.size();i++)
                      {
                          if(taskSubList.get(i).isCompleted()==0)
                          {
                              Task taskItem = taskSubList.get(position);
                              Task taskItem1 = taskSubList.get(i);
                              taskSubList.set(i, taskItem);
                              taskSubList.set(position, taskItem1);
                          }
                      }
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-01
        • 2016-12-04
        • 2014-12-28
        • 1970-01-01
        • 1970-01-01
        • 2019-03-22
        • 1970-01-01
        相关资源
        最近更新 更多