根据java中的索引号将元素移动到数组的前面

Con*_*uhl 3 java arrays

让我们说我有阵列:

int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Run Code Online (Sandbox Code Playgroud)

如何根据索引将元素移动到前面?例:

将元素taco [5]移动到前面应该产生这个:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
// becomes
{5, 0, 1, 2, 3, 4, 6, 7, 8, 9}
Run Code Online (Sandbox Code Playgroud)

编辑:如果整数是对象,它会有所作为吗?

jef*_*unt 7

  1. 将您正在移动的值存储在临时int变量中
  2. 在循环中一次一个地复制数组中的所有元素
  3. 将存储在临时变量中的值分配给新位置(taco[0]在这种情况下,数组的前面)

如果它是一个int值或对象的数组,它没有任何区别.算法是一样的.由于Object引用数组实际上是32位或64位内存引用的数组,因此您实际上仍在复制整数.

这是可以做到的代码 - 有几种方法可以做到这一点,但这是基本的想法:

public int[] moveValueAtIndexToFront(int[] arrayToBeShifted, int index) {
  int valueBeingMoved = originalArray[index];

  for (int i = index; i > 0; i--) {
    arrayToBeShifted[i] = arrayToBeShifted[i-1];
  }

  arrayToBeShifted[0] = valueBeingMoved;

  return arrayToBeShifted;
}
Run Code Online (Sandbox Code Playgroud)
  • 这会将指定索引处的所有值在数组中向后移动一个位置,并将值移动到前面.
  • 如果传入的索引是0,则没有任何东西被移动.
  • 如果传入的索引碰巧是数组中最后一项的索引,则需要移动数组中的每个项.如果你正在处理大型数组,并且你在数组的后期做了很多值的转换,那么这变得非常低效,非常快.

您还可以arraycopy通过OpenJDK项目查看您是否好奇的源代码.


Spi*_*Pig 5

int[] taco = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int index = 5;
int temp = taco[index];
for(int i = index; i > 0; i--) {
    taco[i] = taco[i-1];
}
taco[0] = temp;
Run Code Online (Sandbox Code Playgroud)