java - 移动 ArrayList 中的多个项目

标签 java arraylist

我在 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/

相关文章:

java - 动态 SSL keystore /证书选择

java - 找不到符号二维数组返回问题

java - 如何为 ArrayList 中的相应数据赋值

java - 如何在java中对数组列表进行反向排序? (仅使用选择排序)

java - 扫描字符串时出错

java - AtomicInteger 是同步原语吗?

java - 使用 ArrayList#toArray 方法将 ArrayList 放入 JList

java - 比较并返回给定值的 HashMap

java - 如何解决..抽象类?泛型?

java - Android获取经纬度的方法