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 ...
随机推荐
- 使用eclipse运行maven web项目 插件/非插件
一.使用插件 tomcat 8.5 tomcat-users.xml中添加这一行就ok <user username="admin" password="admin ...
- Cisco DNA网络POC
角色名词解释 拓扑图 集成ISE
- Hibernate映射文件详解(News***.hbm.xml)一
Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...
- web快速开发框架 WebBuilder 8.7发布
一个强大的web开发框架往往与他开发速度有关,他需要帮助程序员尽可能快的完成项目的同时确保它的安全性,WebBuilder是基于Java的web开发框架,其核心开发目标是开发迅速,代码少,学习简单,功 ...
- JavaScript之DOM操作,事件操作,节点操作
1,DOM操作 1.1 概念 所谓DOM,全称Document Object Model 文档对象模型,DOM是W3C(World Wide Web Consortuum )标准,同时也定义了访问诸 ...
- 毕业两年半,入手人生第一款macbook pro
当程序员入手第一款macbook 大家好,我是灰大狼,你们可以叫我灰狼.大狼.甚至是小灰灰. 接下来我主要跟大家分享下作为程序员的我,刚入手一款mac的使用心得. 背景 做程序员三年了,一直用的都是w ...
- pom.xml引入依赖时顺序错误而编译异常
java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference; at j ...
- 天梯 L2 紧急救援 (dijkstra变形+记录路径)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
- 欧拉-拉格朗日方程 The Euler-Lagrange Equation
在 paper: Bounded Biharmonic Weights for Real-Time Deformation 中第一次接触到 Euler-Lagrange 方程,简单记录一下. 泛函的定 ...
- 2019年全网最热门的123个Java并发面试题总结
前言 并发编程几乎是所有互联网公司面试必问的问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密, ...