Java中的Swap,如何实现?
程序员都知道,在C/C++里面交换值的方法:
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
但是在Java中这种方法是行不通的,因为Java对普通类型的变量是不支持引用传递的。
怎么办呢?
1.可以像下面这样通过传数组(也属于传值)的方法来完成交换(很多排序算法就是这样实现)。
public static void swap(int[] data,int a,int b){
int temp=data[a];
data[a]=data[b];
data[b]=temp;
}
package pkg2020华南虎; /**
*
* @author yl
*/
public class SwapValue { public static void main(String[] args) {
SwapValue sv = new SwapValue();
int[] num = new int[2];
num[0] = 20;
num[1] = 30;
sv.swap(num, 0, 1);
System.out.println("num1,num2:" + num[0] + "," + num[1]);
} public static void swap(int[] data, int a, int b) { int temp = data[a];
data[a] = data[b];
data[b] = temp;
}
}
或者
package pkg2020华南虎; /**
*
* @author yl
*/
public class SwapValue { public static void main(String[] args) { int[] num = new int[2];
num[0] = 20;
num[1] = 30;
swap(num, 0, 1);
System.out.println("num1,num2:" + num[0] + "," + num[1]);
} public static void swap(int[] data, int a, int b) { int temp = data[a];
data[a] = data[b];
data[b] = temp;
}
}
注意:数组排序从0开始。
2.也可以通过重新定义个类(在Java中我们可以通过使用int的包装类——integer,然后将其作为值得引用传到函数中,但这个integer包装类也不允许你来改变它的数据域;但这不妨碍我们用自己的包装类,比如说下面实现的MyInteger():
package pkg2020华南虎; /**
*
* @author yl
*/
//MyInteger:于Integer类似,但是其对象可以变值
class MyInteger { private int x;//将x作为唯一的数据成员 public MyInteger(int xIn) {
x = xIn;
}//构造器 public int getValue() {
return x;
}//得到值 public void insertValue(int xIn) {
x = xIn;
}//改变值
} public class SwapValue02 { static void swap(MyInteger xWrap, MyInteger yWrap) {
int temp = xWrap.getValue();
xWrap.insertValue(yWrap.getValue());
yWrap.insertValue(temp);
} public static void main(String[] args) {
int a = 23, b = 25;
MyInteger aWrap = new MyInteger(a);
MyInteger bWrap = new MyInteger(b);
swap(aWrap, bWrap);
a = aWrap.getValue();
b = bWrap.getValue();
System.out.println("a,b is: " + a + "," + b);
}
}
3.由于Java中的参数传递都是采用的值传递方式,这不妨碍我们用swap的时候采用外部内联的方式:
package pkg2020华南虎; /**
*
* @author yl
*/
public class SwapValue03 { int i, j; public static void main(String[] args) {
SwapValue03 sv = new SwapValue03(1, 2);
sv.swap();
System.out.println("i,j =" + sv.i + "," + sv.j);
} public SwapValue03(int i, int j) {//构造方法
this.i = i;
this.j = j;
} public void swap() {
int temp = i;
i = j;
j = temp;
}
}
Java中的Swap,如何实现?的更多相关文章
- Java中swap()实现
Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...
- 转——JAVA中calendar,date,string 的相互转换和详细用法
package cn.outofmemory.codes.Date; import java.util.Calendar; import java.util.Date; public class Ca ...
- JAVA中关于并发的一些理解
一,JAVA线程是如何实现的? 同步,涉及到多线程操作,那在JAVA中线程是如何实现的呢? 操作系统中讲到,线程的实现(线程模型)主要有三种方式: ①使用内核线程实现 ②使用用户线程实现 ③使用用户线 ...
- java中两个值互换
两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...
- 《Java中方法的参数传递方式只有一种:值传递》
//方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...
- Redis学习记录之Java中的初步使用
1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http:// ...
- java中经常使用的日期格式化(全)
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...
- java中的mmap实现--转
什么是mmap mmap对于c程序员很熟悉,对于java程序员有点陌生.简而言之,将文件直接映射到用户态的内存地址,这样对文件的操作不再是write/read,而是直接对内存地址的操作. 在c中提供了 ...
- Java中Date各种相关用法
Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...
随机推荐
- Java虚拟机-类文件结构
目录 类文件结构 Class类文件的结构 魔数与Class文件的版本 常量池 访问标志 类索引.父类索引和接口索引集合 字段表集合 方法表集合 属性表集合 完整结构描述 实例 源码 Class文件 分 ...
- 用sublime 3搭建php 运行环境
1.首先把php加入到环境变量中 2.第二步是打开sblime tools->build system->build new system 然后在打开的文件写上 { "cmd&q ...
- 常用linux 命令
ls -lt 时间倒序 ls -ltr 时间正序 ls -lS 大小倒序 ls -li 显示inode ----------------- cat smb_quicktest.py| grep -E ...
- Liquibase 使用(全)
聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway . 开发过程经常会有表结构和变更,让运维来维护的话,通常会 ...
- Jquery为动态添加的元素添加事件
$("tbody").on("click","button", function() { var text = $(this).parent ...
- div3的e题有点水呀
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- LINQ 实现多字段关联查询 C#
var query = from main in _userDeviceChannelRole.Table join deviceChannelInfo in _deviceChannelReposi ...
- mysqldump主从复制
一,主从复制条件 1,开启binlog功能2,主库建立同步账号3,从库配置master.info(change mast..)4,start slave复制开关知识点:####1, 3个线程,主库i ...
- 20191121-11 Scrum立会报告+燃尽图 07
次作业要求参见 http://edu.cnblogs.com/campus/nenu/2019fall/homework/10071 一:组名: 组长组 组长:杨天宇 组员:魏新 罗杨美慧 王歆瑶 ...
- linux 双Redis + keepalived 主从复制+宕机自主切换
主要核心思想,如果master 和 salve 全部存活的情况,VIP就漂移到 master.读写都从master操作,如果master宕机,VIP就会漂移到salve,并将之前的salve切换为ma ...