gpt4 book ai didi

java - 移动 ArrayList 中的多个项目

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:01 25 4
gpt4 key购买 nike

我在 ArrayList 中有以下数据。为了方便起见,我们假设它是一个 String ArrayList。

Mokey
MokeyBaby1
MokeyBaby2
MokeyBaby3
Dog
DogBaby1
DogBaby2
Cat
CatBaby1

我需要将相关的项目一起移动。

例如: 向下移动猴子。新的 ArrayList 看起来像这样。

Dog
DogBaby1
DogBaby2
Mokey
MokeyBaby1
MokeyBaby2
MokeyBaby3
Cat
CatBaby1

我已经有一个方法可以告诉我哪些 ArrayList 索引是相关的。

例如:getRelatedIndexes("Monkey") 将为原始列表返回 0,1,2,3

我只需要知道是否有一种简单的方法可以将 ArrayList 中的所有项目一起向上或向下移动。

谢谢。

最佳答案

您可以将列表包装在可重新排序的列表中,并通过该列表实现重新排序 - 至少您不需要破解主列表。它将维护整数数组中的顺序,然后您可以随意移动该数组。如果您愿意,您甚至可以以多个不同的顺序维护相同的数据。

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并找出应该以哪种方式旋转哪些子列表来实现您的移动。

关于java - 移动 ArrayList 中的多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27317421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com