你可以将你的列表包装在可重新订购的列表中,并通过它来实现你的重新排序 - 至少你不需要破解主列表。它会维护一系列整数的顺序,然后您可以随意移动。如果你愿意,你甚至可以用几种不同的顺序维护相同的数据。
public static class OrderedList<T> extends AbstractList<T> {
// The list I proxy.
private final List<T> it;
// The order.
private final int[] order;
public OrderedList(List<T> wrap) {
it = wrap;
order = new int[it.size()];
// Initially the same order.
for (int i = 0; i < order.length; i++) {
order[i] = i;
}
}
@Override
public T get(int index) {
return it.get(order[index]);
}
@Override
public int size() {
return it.size();
}
// TODO - Only moves up! Breaks on a down move.
public void move(int start, int length, int to) {
int[] move = new int[length];
// Copy it out.
System.arraycopy(order, start, move, 0, length);
// Shift it down.
System.arraycopy(order, start + length, order, start, to - start);
// Pull it back in.
System.arraycopy(move, 0, order, to, length);
}
}
public void test() {
List<String> t = Arrays.asList("Zero", "One", "Two", "Three", "Four", "Five");
OrderedList<String> ordered = new OrderedList(t);
System.out.println(ordered);
ordered.move(1, 2, 3);
System.out.println(ordered);
}
打印
[Zero, One, Two, Three, Four, Five]
[Zero, Three, Four, One, Two, Five]
或者 - 使用Collections.rotate,并制定出什么子列表应该旋转它的方式来实现你的举动。
如果我很了解你,你希望为每种类型的动物获取一个'ArrayList'?像'monkeyList = animalsList.magicMethod(getRelatedIndexes(“Monkey”))''? – fxm 2014-12-05 13:57:56
为什么不列出清单? – mkrakhin 2014-12-05 13:58:31
嘿大家,只是要清楚,这不是一个字符串ArrayList,所以我无法排序它。 @fxm – john 2014-12-05 14:00:44