如何只对List的特定部分进行排序?

时间:2015-02-06 06:17:18

标签: java android arrays sorting

我在java中有一个双打列表,我想要一个按升序排序的结果列表。

List<Double> DList=new ArrayList();

testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);
testList.add(0.71);
testList.add(0.71);
testList.add(0.71);
testList.add(0.92);
testList.add(0.12);
testList.add(0.65);
testList.add(0.34);
testList.add(0.62);
testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);

我必须从索引7执行排序。 我怎么能这样做?

1 个答案:

答案 0 :(得分:6)

  • List.subList(startIndex, endIndex)创建一个“支持”的集合,可以看到您的原始列表,我认为也就是“代理”。
  • Collections.sort()只会对子列表进行排序,任何互换实际上都会出现在原始列表中

JavaDoc对此的解释比我能管理得更清楚:

  

这种方法消除了对显式范围操作的需要   排序通常存在于数组中)。任何期望的操作   list可以通过传递subList视图用作范围操作   而不是整个列表。例如,以下习语删除了一个   列表中的元素范围

list.subList(from, to).clear();

使用原始问题的示例

List<Double> list = new ArrayList<Double>();
list.add(0.5);
list.add(0.2);
list.add(0.9);
list.add(0.1);
list.add(0.1);
list.add(0.1);
list.add(0.54);
list.add(0.71);
list.add(0.71);
list.add(0.71);
list.add(0.92);
list.add(0.12);
list.add(0.65);
list.add(0.34);
list.add(0.62);
list.add(0.5);
list.add(0.2);
list.add(0.9);
list.add(0.1);
list.add(0.1);
list.add(0.1);
list.add(0.54);
Collections.sort(list.subList(7, list.size()));