如何在Java中编写基本的交换函数

2022-08-31 17:23:08

我是Java的新手。如何编写以下 C 代码的 java 等效项。

void Swap(int *p, int *q)
{
   int temp;
   temp = *p;
   *p = *q;
   *q = temp;
} 

答案 1

这里有一个技巧:

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);
}

答案 2

对两个整数进行排序

简短的回答是:你不能那样做,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. 

对 int[] 数组进行排序

显然,真正的目标是对一系列整数进行排序。这是一个带有 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;
}

推荐