Java交换数组元素
发表于:2021-03-30 | 分类: 后端 Java
字数统计: 416 | 阅读时长: 1分钟 | 阅读量:

Java 交换数组元素

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author zhkai
* @date 2021年3月30日14:09:29
*/
public class SwapElement {
/**
* 将数组下标为i和数组下标为j的两个数组元素进行交换
*
* @param nums 待交换数组
* @param i 需交换下标
* @param j 需交换下标
* @return 交换后的数组
*/
public static int[] swapElementOne(int[] nums, int i, int j) {
int item = nums[i];
nums[i] = nums[j];
nums[j] = item;
return nums;
}

/**
* 将数组下标为i和数组下标为j的两个数组元素进行交换
*
* @param nums 待交换数组
* @param i 需交换下标
* @param j 需交换下标
* @return 交换后的数组
*/
public static int[] swapElementTwo(int[] nums, int i, int j) {
List<Integer> item = Arrays.stream(nums).boxed().collect(Collectors.toList());
Collections.swap(item, i, j);
int[] result = item.stream().mapToInt(Integer::valueOf).toArray();
return result;
}

/**
* 将数组下标为i和数组下标为j的两个数组元素进行交换
*
* @param nums 待交换数组
* @param i 需交换下标
* @param j 需交换下标
* @return 交换后的数组
*/
public static int[] swapElementThree(int[] nums, int i, int j) {
nums[i] ^= nums[j];
nums[j] ^= nums[i];
nums[i] ^= nums[j];
return nums;
}
}

效率对比

1
2
3
4
输入:nums = {1, 2, 3, 4}; i=1; j=3;
方法一:2420500ns
方法二:163113800ns
方法三:20200ns

总结

  • 方法一:
    使用中间变量进行交换,不能直接进行交换。
  • 方法二:
    使用Collections.swap()方法进行交换,需要先将数组转换成List,交换完成后再转换成数组返回。
  • 方法三:
    使用位运算符进行交换。
    ^:如果相对应位值相同,则结果为0,否则为1
    C ^= C1 等价于 C = C^C1
上一篇:
LeetCode一维数组的动态和
下一篇:
LeetCode缺失的第一个正数