Метод Java для свопинга примитивов

как я делаю свою функцию подкачки в Java, если нет никакого метода, которым мы можем передать ссылкой? Кто-то мог дать мне код?

swap(int a, int b)
{
     int temp = a;
     a = b;
     b = temp;
}

но привычка изменения быть отраженной назад начиная с Java передает значением

41
задан Lone Learner 3 February 2019 в 17:36
поделиться

3 ответа

Вы не можете создать замену методов, поэтому после вызова swap (x, y) значения x и y будут поменяться местами. Вы можете создать такой метод для изменяемых классов, меняя местами их содержимое¹, но это не изменит их идентичность объекта, и вы не сможете определить для этого общий метод.

Однако вы можете написать метод, который меняет местами два элемента в массиве или списке, если вы этого хотите.

¹ Например, вы можете создать метод обмена, который принимает два списка, и после выполнения метода список x будет иметь предыдущее содержимое списка y, а список y будет иметь предыдущее содержимое списка x.

24
ответ дан 27 November 2019 в 00:16
поделиться

Это зависит от того, чем вы хотите заниматься. Этот код меняет местами два элемента массива.

void swap(int i, int j, int[] arr) {
  int t = arr[i];
  arr[i] = arr[j];
  arr[j] = t;
}

Что-то вроде этого меняет местами содержимое двух int [] одинаковой длины.

void swap(int[] arr1, int[] arr2) {
  int[] t = arr1.clone();
  System.arraycopy(arr2, 0, arr1, 0, t.length);
  System.arraycopy(t, 0, arr2, 0, t.length);
}

Что-то вроде этого меняет местами содержимое двух BitSet (с использованием алгоритма обмена XOR ):

void swap(BitSet s1, BitSet s2) {
  s1.xor(s2);
  s2.xor(s1);
  s1.xor(s2);
}

Примерно так меняются местами x и ] y поля некоторого класса Point :

void swapXY(Point p) {
  int t = p.x;
  p.x = p.y;
  p.y = t;
}
13
ответ дан 27 November 2019 в 00:16
поделиться

Я могу сделать что-то вроде следующего. Конечно, с изобилием классов Collection я не могу себе представить, что когда-либо понадобится использовать это в каком-либо практическом коде.

public class Shift {
  public static <T> T[] left (final T... i) {
    if (1 >= i.length) {
      return i;
    }
    final T t = i[0];
    int x = 0;
    for (; x < i.length - 1; x++) {
      i[x] = i[x + 1];
    }
    i[x] = t;
    return i;
  }
}

Вызывается с двумя аргументами, это своп.

Его можно использовать следующим образом:

int x = 1;
int y = 2;
Integer[] yx = Shift.left(x,y);

Альтернативно:

Integer[] yx = {x,y};
Shift.left(yx);

Затем

x = yx[0];
y = yx[1];

Примечание: примитивы автоматически упаковываются.

1
ответ дан 27 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: