如何在Java中编写基本的交换函数
我是Java的新手。如何编写以下 C 代码的 java 等效项。
void Swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
我是Java的新手。如何编写以下 C 代码的 java 等效项。
void Swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
这里有一个技巧:
public static int getItself(int itself, int dummy)
{
return itself;
}
public static void main(String[] args)
{
int a = 10;
int b = 20;
a = getItself(b, b = a);
}
简短的回答是:你不能那样做,java没有指针。
但您可以执行以下类似操作:
public void swap(AtomicInteger a, AtomicInteger b){
// look mom, no tmp variables needed
a.set(b.getAndSet(a.get()));
}
您可以对各种容器对象(如集合和数组或具有 int 属性的自定义对象)执行此操作,但不能对基元及其包装器执行此操作(因为它们都是不可变的)。但我想,让它成为单行游戏的唯一方法是使用AtomicInteger。
顺便说一句:如果你的数据恰好是一个列表,更好的交换方法是使用 Collections.swap(List, int, int)
:
Swaps the elements at the specified positions in the specified list.
(If the specified positions are equal, invoking this method leaves
the list unchanged.)
Parameters:
list - The list in which to swap elements.
i - the index of one element to be swapped.
j - the index of the other element to be swapped.
显然,真正的目标是对一系列整数进行排序。这是一个带有 Arrays.sort(int[])
的单行代码:
int[] arr = {2,3,1,378,19,25};
Arrays.sort(arr);
要检查输出:
System.out.println(Arrays.toString(arr));
// [1, 2, 3, 19, 25, 378]
下面是一个简单的帮助器函数,用于在整数数组中交换两个位置:
public static void swap(final int[] arr, final int pos1, final int pos2){
final int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}