как я делаю свою функцию подкачки в Java, если нет никакого метода, которым мы можем передать ссылкой? Кто-то мог дать мне код?
swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
но привычка изменения быть отраженной назад начиная с Java передает значением
Вы не можете создать замену методов, поэтому после вызова swap (x, y)
значения x и y будут поменяться местами. Вы можете создать такой метод для изменяемых классов, меняя местами их содержимое¹, но это не изменит их идентичность объекта, и вы не сможете определить для этого общий метод.
Однако вы можете написать метод, который меняет местами два элемента в массиве или списке, если вы этого хотите.
¹ Например, вы можете создать метод обмена, который принимает два списка, и после выполнения метода список x будет иметь предыдущее содержимое списка y, а список y будет иметь предыдущее содержимое списка x.
Это зависит от того, чем вы хотите заниматься. Этот код меняет местами два элемента массива.
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;
}
Я могу сделать что-то вроде следующего. Конечно, с изобилием классов 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];
Примечание: примитивы автоматически упаковываются.