Java 将数组的顺序复制到新数组

Java 将数组的顺序复制到新数组,java,sorting,Java,Sorting,我有一个对象的Java列表,它定期被清除,然后用数据库中对象的更新版本重新加载。在重新加载之前,用户可能已经选择以某种方式对列表进行排序。我需要找到一个算法,将前一个列表的顺序应用于新列表 我不能使用比较器,因为对象可能有效地处于随机顺序 这是我的方法存根: public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfLis

我有一个对象的Java列表,它定期被清除,然后用数据库中对象的更新版本重新加载。在重新加载之前,用户可能已经选择以某种方式对列表进行排序。我需要找到一个算法,将前一个列表的顺序应用于新列表

我不能使用比较器,因为对象可能有效地处于随机顺序

这是我的方法存根:

    public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfList, List<RetrievedPage> freshCopyOfList)
{       
    for (RetrievedPage retrievedPage : previousCopyOfList)
    {
                //reordering, but how?
    }

    return freshCopyOfList;
}
公共静态列表copyPreviousListOrderToFreshList(列表previousCopyOfList,列表freshCopyOfList)
{       
for(RetrievedPage RetrievedPage:previousCopyOfList)
{
//重新排序,但如何?
}
返回FreshCopyof列表;
}
提前感谢,,
Barry

您仍然可以使用比较器,只需根据项目在上一个列表中的位置进行比较即可

Collections.sort(freshCopyOfList, new Comparator<RetrievedPage>() {
    public int compare(RetrievedPage o1, RetrievedPage o2) {
        int firstPagePosition = previousCopyOfList.indexOf(o1);
        int secondPagePosition = previousCopyOfList.indexOf(o2);

        if (secondPagePosition == -1) return -1;
        if (firstPagePosition == -1) return 1;

        return firstPagePosition - secondPagePosition;
    }
});
Collections.sort(freshCopyOfList,new Comparator(){
公共整数比较(检索页o1,检索页o2){
int firstPagePosition=previousCopyOfList.indexOf(o1);
int secondPagePosition=列表的上一个副本索引(o2);
if(secondPagePosition==-1)返回-1;
if(firstPagePosition==-1)返回1;
返回firstPagePosition-secondPagePosition;
}
});

当然,如果列表中有不同的对象,则不应忘记覆盖比较对象中的
equals()
hashCode()
方法。否则,
indexOf()
方法将查找完全相同的对象,并且不会以您想要的方式测试它们的相等性。

谢谢Malcolm-我得到了一条JUnit绿线,因此它可以工作。我对Comparator没有太多的经验,所以我必须想一想它是如何工作的!我想我明白了。这让我有点困惑,因为fresh列表中的对象是新对象,那么indexOf如何在上一个列表中找到它们呢。但是,调用索引equals(),我已经在RetrievedPage中重写了它。是的,正确:您应该重写
equals()
,这样
indexOf()
方法就可以知道如何查找类似的对象,而不是完全相同的对象。我应该在回答中说出来,我会补充这些信息。