gpt4 book ai didi

java - 如何在java中的固定位置将数组列表元素向右移动一些索引

转载 作者:行者123 更新时间:2023-12-02 01:19:59 31 4
gpt4 key购买 nike

我有一个大小为 10 个元素的数组列表。我在这里想要实现的是,当我在任何索引处添加元素时,除了某些固定索引之外,它旁边的元素应该移动。

例如,假设我的数组列表如下

[10, 20, 30, 40, 50,60,70,80,90,100]

索引为 {0,1,2,3,4,5,6,7,8,9}

固定索引{4,6}

当我从索引 10 中删除元素并添加索引 3 时,输出应如下所示

[10, 20, 30, 100, 50, 40,70,60,80,90,]

如果您发现在索引3处添加第10元素后,索引{4,6}处的值没有改变。

    List<Integer> values = new ArrayList<>();
values.add(10);
values.add(20);
values.add(30);
values.add(40);
values.add(50);
values.add(60);
values.add(70);
values.add(80);
values.add(90);
values.add(100);
System.out.println(values);

values.removeAt(9)
values.add(3,100);
System.out.println(values);

# Output
[10, 20, 30, 40, 50,60,70,80,90,100]
[10, 20, 30, 100, 40,50,60,70,80,90]

如果有人可以建议任何排序方法或集合来实现此目的,那将非常有帮助。

示例输入和输出:

int[] a= [7, 4, 3, 2, 1, 5, 6, 4, 8, 9] 固定索引为 {1,2}

删除第 6 个索引元素 (6) 并在索引 0 处添加输出应如下所示:

[6,4,3,7,2,1,5,4,8,9]

最佳答案

这是我使用现有 ArrayList 类的简单解决方案,不过如果您定义自己的实现来满足您的需求可能是最好的。请注意,如果您想确保它们遵守您定义的规则,您可能需要重写更多方法:

public static class FixableArrayList<T> extends ArrayList<T> {

// ascending and descending views of the fixed indices
private final SortedSet<Integer> fixedAsc;
private final SortedSet<Integer> fixedDec;

public FixableArrayList() {
TreeSet<Integer> treeSet = new TreeSet<>();
fixedAsc = treeSet;
fixedDec = treeSet.descendingSet();
}

public boolean addFixedIndex(int ind) { return fixedAsc.add(ind); }
public boolean removeFixedIndex(int ind) { return fixedAsc.remove(ind); }

public void move(int fromInd, int toInd) {
if (fromInd == toInd) {
return;
}
if (fixedAsc.contains(fromInd)) {
throw new IllegalArgumentException("Cannot remove from fixed index: " + fromInd);
}
if (fixedAsc.contains(toInd)) {
throw new IllegalArgumentException("Cannot add to fixed index: " + toInd);
}

super.add(toInd, super.remove(fromInd));

if (toInd < fromInd) {
// all between `from` and `to` shifted up, swap fixed indices down back into position
// iterate from low (toInd) to high (fromInd)
for (int i : fixedAsc.subSet(toInd, fromInd)) {
super.add(i, super.remove(i + 1));
}
} else {
// all between `from` and `to` shifted down, swap fixed indices up back into position
// iterate from high (toInd) to low (fromInd)
for (int i : fixedDec.subSet(toInd, fromInd)) {
super.add(i, super.remove(i - 1));
}
}
}
}

public static void main(String[] args) {
FixableArrayList<Integer> values = new FixableArrayList<>();
values.addAll(Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80, 90, 100));

// set the indices that you want to remain fixed
values.addFixedIndex(3);
values.addFixedIndex(5);
values.addFixedIndex(9);

System.out.println(values);

values.move(0, 8);
System.out.println(values);

values.move(8, 0);
System.out.println(values);
}

关于java - 如何在java中的固定位置将数组列表元素向右移动一些索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894970/

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