我有一个java对象列表。我使用比较器根据特定字段对对象列表进行排序。现在,当列表未排序时,我需要元素的索引。有人可以展示一些例子吗。
答案 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;
}