排序后arraylist中的元素位置

时间:2014-05-29 09:37:28

标签: java sorting arraylist map

假设我有以下内容:

List<Double> test = new ArrayList<Double>();
test.add(1.0);
test.add(1.3);
test.add(1.1);
test.add(1.2);
test.add(1.5);

如果我想对值进行排序,我可以使用Collections.sort(test)。这将按照asc顺序对它们进行排序。有没有办法在排序之前仍然保持对原始位置的引用?

e.g。在排序之后它将是

test.add(1.0);
test.add(1.1); - would be index position 3
test.add(1.2); - would be index position 2
test.add(1.3);
test.add(1.5);

这是可能的还是只是一种错误的方法?

2 个答案:

答案 0 :(得分:2)

由于Collections.sort()对原始列表进行排序,但没有给你一份副本,没有。在排序之前,您必须获取列表的副本。

另一种方法是创建一个元组列表 - 原始值及其索引,并使用比较器对比较单独的值进行排序,例如。

test.add(new Pair(1, 1.0));
test.add(new Pair(2, 1.2));
Collections.sort(test, new PairComparator()); // this sorts on the 2nd value of each Pair

等。这将为您提供一个元组列表,其中记录了原始位置索引。

答案 1 :(得分:2)

您可以使用HashMap

Map<Integer, Double> test = new Hashmap<>();
test.put(1, 1.0);
test.put(2, 1.3); //etc.

即使您对其进行排序,按键也不会改变。