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

Java交换数组元素的更多相关文章

  1. JavaScript下实现交换数组元素上下移动例子

    // 交换数组元素    var swapItems = function(arr, index1, index2) {        arr[index1] = arr.splice(index2, ...

  2. JavaScript 交换数组元素位置的几种方式

    前言 交换数组元素位置是开发项目中经常用到的场景,总结下用过的几种方式. 第三方变量 最基础的方式,创建一个变量作为中转. let temp = array[index1]; array[index1 ...

  3. Java实现数组元素反转

    package com.fgy.demo; /** * 数组元素反转 */ public class demo05 { public static void main(String[] args) { ...

  4. java 简单数组元素的增删改查

    public class Test { static int[] a = new int[20]; static int n; public static void main(String[] arg ...

  5. 实现数组元素互换位置(乘机理解java参数传递)

    Java中函数参数是按值传递的,在实现数组元素互换位置之前,我想先说一下Java函数参数传递过程.一般情况下我们会把参数分为基本数据类型和引用数据类型,然后分别来讲参数传递,因为他们的外在表现似乎是不 ...

  6. Java 数组元素逆序Reverse的三种方式

    Java 数组元素逆序Reverse的三种方式   本文链接:https://blog.csdn.net/xHibiki/article/details/82930521 题目 代码实现 说明 int ...

  7. java 在循环中删除数组元素

    在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...

  8. java数组元素的输出

    java数组元素的输出 利用Arrays.toString(数组名即可) String[] name = {"Tom", "John", "Nike& ...

  9. 交换数组中两个元素的位置,元素包括key和value 一维数组

    /*author: yangyu@sina.cndescription: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子*/$arr = array(11=>'a', ...

随机推荐

  1. Python网络爬虫实战入门

    一.网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序. 爬虫的基本流程: 发起请求: 通过HTTP库向目标站点发起请求,也就是发送一个Request ...

  2. UVM:6.2.3 sequencer 的grab 操作

    转载:UVM:6.2.3 sequencer 的grab 操作_tingtang13的博客-CSDN博客 1.grab 比lock 优先级更高. 2.lock 是插到sequencer 仲裁队列的后面 ...

  3. amba web

    arm amba doc https://developer.arm.com/docs

  4. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  5. 百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践

    自动驾驶是最近几年的热门领域,专注于自动驾驶技术的创业公司.新造车企业.传统车厂都在这个领域投入了大量的资源,推动着 L4.L5 级别自动驾驶体验能尽早进入我们的日常生活. 自动驾驶技术实现的核心环节 ...

  6. kafaka高效吞吐量-生产端,服务端,消费端

    零拷贝:sendfile 生产端 生产端:消息压缩,缓存批量发送,异步解耦 多线程并发:防止某一个业务阻塞等待 接收消息缓存 BufferPool设计:不释放 服务端 Reactor模型,顺序写,页缓 ...

  7. DockerFile-构建容器的基石

    DockerFile 非常的关键,它不同于 docker commit 的手动命令方式来进行镜像的构建和修改,类似 docker commit 的交互被称为命令式交互.命令式交互是运维一直绕不开的一种 ...

  8. jmeter压测IP欺骗绕过服务端限流

    1.环境声明 jmeter3.0 后端为内网环境 2.检查内网闲置的ip 工具地址,无需复杂安装,解压点击就可以用啦~~ https://pan.baidu.com/s/1Yzs1vezfFMoy-m ...

  9. 菜鸡的Java笔记 第十九 - java 继承

    继承性的主要目的,继承的实现,继承的限制                继承是面向对象中的第二大主要特点,其核心的本质在于:可以将父类的功能一直沿用下去                为什么需要继承? ...

  10. typing使用

    官方文档: typing 注: typing是python3.5(PEP484)开始的 可用于: 类型检查器.集成开发环境.静态检查器等, 但是不强制使用 使用方式 两种使用方式 别名: 先定义=, ...