如何在java中获取排序的对象列表的索引?

时间:2015-02-02 02:16:07

标签: java list sorting indexing

我有一个java对象列表。我使用比较器根据特定字段对对象列表进行排序。现在,当列表未排序时,我需要元素的索引。有人可以展示一些例子吗。

2 个答案:

答案 0 :(得分:1)

两种方法:

  • 将您的项目包装在包含项目及其索引的类中,对列表进行排序,然后记录原始订单

  • 实施您自己的排序算法

答案 1 :(得分:0)

如果允许额外的空间,这可以在O(N log(N))(摊销)时间内完成。只需在排序之前构建项目原始索引的哈希映射,然后再将它们读出来。

public static <T> int[] sortedIndices(List<T> lst, Comparator<T> comp){
    HashMap<T, Integer> indicesMap = new HashMap<T, Integer>();
    int i = 0;
    for(T t : lst){
        indicesMap.put(t, i++);
    }
    ArrayList<T> cpy = new ArrayList<T>(lst);
    Collections.sort(cpy, comp);

    int[] indices = new int[cpy.size()];
    i = 0;
    for(T t : cpy){
        indices[i++] = indicesMap.get(t);
    }

    return indices;
}