Java数组相邻元素交换:非Java风格实现及批量交换方法问询
批量交换数组相邻元素的简洁实现(贴近Python思路)
嗨,刚从Python转Java的话,确实会觉得Java有些写法偏“厚重”,不过完全可以用贴近Python思路的简洁方式实现批量交换相邻元素(第1&2、3&4、5&6...这样的成对交换)。
首先,先明确核心逻辑:和Python里的思路一致——按步长为2的索引遍历数组,每次交换当前索引和下一个索引的元素,同时注意数组长度为奇数时,最后一个元素不用处理。
方法一:简洁的传统循环(最接近Python的for循环写法)
这种写法没有多余的冗余代码,和Python的循环逻辑几乎一致:
import java.util.Arrays; public class SwapAdjacentPairs { public static void swapAdjacent(int[] arr) { // 遍历索引0、2、4...,步长为2,确保i+1不越界 for (int i = 0; i < arr.length - 1; i += 2) { // 交换arr[i]和arr[i+1],Java没有Python的元组直接交换,用临时变量是最稳妥的方式 int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } public static void main(String[] args) { int[] evenArr = {1, 2, 3, 4, 5, 6}; swapAdjacent(evenArr); System.out.println(Arrays.toString(evenArr)); // 输出 [2, 1, 4, 3, 6, 5] int[] oddArr = {10, 20, 30, 40, 50}; swapAdjacent(oddArr); System.out.println(Arrays.toString(oddArr)); // 输出 [20, 10, 40, 30, 50] } }
方法二:用Stream API实现更“Pythonic”的简洁写法
如果你习惯Python里的函数式风格,Java 8+的Stream API可以让代码更简洁,避免显式的循环结构:
import java.util.Arrays; import java.util.stream.IntStream; public class SwapAdjacentWithStream { public static void swapAdjacent(int[] arr) { // 遍历0到arr.length/2的索引,每个索引对应一对元素的起始位置 IntStream.range(0, arr.length / 2) .forEach(i -> { int idx = i * 2; int temp = arr[idx]; arr[idx] = arr[idx + 1]; arr[idx + 1] = temp; }); } public static void main(String[] args) { int[] arr = {7, 8, 9, 10}; swapAdjacent(arr); System.out.println(Arrays.toString(arr)); // 输出 [8, 7, 10, 9] } }
关键点说明
- 两种方法都遵循了Python的核心思路:成对处理相邻元素,步长为2遍历索引
- 不用担心数组越界:第一种方法用
i < arr.length - 1确保i+1不会超出数组范围;第二种方法用arr.length / 2(整数除法),自动忽略奇数长度数组的最后一个元素 - 不用拘泥于所谓的“Java式”写法,Java现在也支持很多简洁的风格,和Python的思维可以无缝衔接
内容的提问来源于stack exchange,提问作者Java lava
相关产品推荐
相关产品推荐

