一种解决方案是迭代id数组,并在对象中搜索数组中的当前id.我们知道它的最终(所需)位置:它是数组中的索引(因为我们希望列表就像数组一样排序),所以我们可以将这个元素移动到列表中的最后位置(我们通过交换它来实现这一点)元素位于我们当前在数组中的位置).
for (int i = ids.length - 1; i > 0; i--) { // Downward for efficiency
final String id = ids[i];
// Big optimization: we don't have to search the full list as the part
// before i is already sorted and object for id can only be on the remaining
for (int j = i; j >= 0; j--) // NOTE: loop starting at i
if (id.equals(myList.get(j).getId()) {
Collections.swap(myList,j,i);
break;
}
}
注意:for循环省略了最后一个元素(i == 0),因为如果所有其他元素都已到位,则last也在(它)的位置.
这比创建比较器和使用排序算法(例如Collections.sort()所做的)要快得多,因为元素的顺序已经知道(由ids数组定义)和排序算法(无论算法有多聪明)是)只能使用信息[less |等于|更多]由比较者返回.