zoukankan      html  css  js  c++  java
  • Java交换数组元素

    Java 交换数组元素

    代码示例

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

    效率对比

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

    总结

    • 方法一:
      使用中间变量进行交换,不能直接进行交换。
    • 方法二:
      使用Collections.swap()方法进行交换,需要先将数组转换成List,交换完成后再转换成数组返回。
    • 方法三:
      使用位运算符进行交换。
      ^:如果相对应位值相同,则结果为0,否则为1
      C ^= C1 等价于 C = C^C1
  • 相关阅读:
    P1308 统计单词数
    P1055 ISBN号码
    InterlockedCompareExchange 原子操作
    InterlockedCompareExchange 原子操作
    VS2015 定位内存泄露
    VS2015 定位内存泄露
    const volatile mutable修饰变量的区别
    const volatile mutable修饰变量的区别
    HWND、HANDLE、HMODULE、HINSTANCE的区别
    CodeIgniter框架中关于URL重写(index.php)的二三事
  • 原文地址:https://www.cnblogs.com/GardenofEden/p/14597854.html
Copyright © 2011-2022 走看看