首页 > 编程语言 >JAVA的swap实现

JAVA的swap实现

时间:2023-11-29 18:47:23浏览次数:34  
标签:JAVA MyInteger 实现 交换 ts int swap public

JAVA的swap实现

JAVA不能操作地址,所以不能像CPP那样方便地实现对基本数据类型的swap

  • java中的基本数据类型传递属于引用传递,并不会像c/c++实现指针传递;
  • 通过包装类对象配合反射可以实现数据的交换。

只能通过以下几种方式。

通过数组对象交换

public class TestSwap {

	public static void main(String[] args){
		int a = 3;
		int b = 5;
		System.out.println("交换前:"+"a="+a+" b="+b); 
		//以数组接收后赋值,注意赋值顺序,注意对应关系
		int[] arr = swap(a,b);
		a = arr[0];
		b = arr[1];
		System.out.println("交换后:"+"a="+a+" b="+b); 
	}
	
	//交换
	private static int[] swap(int x, int y){
		//以数组形式返回
		return new int[]{y,x};
	}
}

通过类对象属性交换

public class TestSwap {
	// 定义类变量
	private int a = 3;
	private int b = 5;

	public static void main(String[] args) {
		TestSwap ts = new TestSwap();
		System.out.println("交换前:"+"a="+ts.a+" b="+ts.b); 
		//对象调用
		ts.swap();
		System.out.println("交换后:"+"a="+ts.a+" b="+ts.b);
	}

	//交换  只能运用在对象只有两个类变量时,交换这两个确定的变量
	private void swap() {
		int temp = this.a;
		this.a = this.b;
		this.b = temp;
	}
}

通过自定义包装类对象交换

//MyInteger: 与Integer有些类似,但是其对象可以变值
class MyInteger {   
	private int x;    // 将x作为唯一的数据成员 
	public MyInteger(int xIn) { x = xIn; } // 构造器 
	public int getValue() { return x; }  // 得到值  
	public void setValue(int xIn) { x = xIn;} // 改变值
}

public class Swapping {   
	// swap: 传对象引用 
	static void swap(MyInteger rWrap, MyInteger sWrap) {      
		// 变值过程     
		int t = rWrap.getValue();      
		rWrap.setValue(sWrap.getValue());      
		sWrap.setValue(t);   
	}   
	public static void main(String[] args) {      
		int a = 23, b = 47;      
		System.out.println("Before. a:" + a + ", b: " + b);      
		MyInteger aWrap = new MyInteger(a);      
		MyInteger bWrap = new MyInteger(b);      
		swap(aWrap, bWrap);      
		a = aWrap.getValue();      
		b = bWrap.getValue();      
		System.out.println("After.  a:" + a + ", b: " + b);   
	}
}

标签:JAVA,MyInteger,实现,交换,ts,int,swap,public
From: https://www.cnblogs.com/kdlyh/p/17865579.html

相关文章

  • Java 8 仍被广泛使用,占比 50%
    调查中,更多的开发人员选择在生产中使用Java17,而不是Java11。Docker逐渐成为打包Web应用程序的首选,且Spring和SpringBoot的使用率遥遥领先。具体而言,开发者最常使用的 Java版本是 Java8,占比高达 50%;其次分别是 Java17(45%)、Java11(38%)以及 Java20(11%......
  • centos 实现开机运行脚本
    Craftedby[Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)Youcentos实现开机运行脚本Genie在CentOS系统中,如果您希望在开机时自动运行一个脚本,可以采用以下几种方法之一来实现:方法1:使用cron的@reboot打开当前用户的crontab编......
  • pageoffice6 实现在线模板套红
    在Web项目中处理Word文档,经常会用到Word模板,只不过这里的“模板”概念,都是指在Web项目中预先放置的doc、docx等扩展名的、真正的Word文档,对于Excel和PPT就是指xls、xlsx、ppt、pptx等扩展名的文件,而不是指微软Office的dot、dotx、xlt、xltx等扩展名的文件。对于模板的使用,有两种方......
  • Golang-常见数据结构实现原理
    chan 1.chan数据结构 src/runtime/chan.go:hchan定义了channel的数据结构:typehchanstruct{qcountuint//当前队列中剩余元素个数dataqsizuint//环形队列长度,即可以存放的元素个数bufunsafe.Pointer//环形队列指针......
  • 学习笔记1 :Java基础
    1、JVM(1)Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境。(2)JVM包括:一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域(3)跨平台:JVM在执行字节码时,把字节码解释成具体平台上的机器指令执行。一套代码,一次编译,多平台运行。但是,不同平台需要不......
  • java基础学习:跳转关键字:break,continue
    1.总览:break:跳出并结束当前所在循环的执行continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行 packagecom.itheima.BreakAndContinue;publicclassBreakAndContine1{publicstaticvoidmain(String[]args){for(inti=1;i<=5;i++){......
  • java基础学习:死循环,循环嵌套
    1.死循环:写法 packagecom.itheima.loop;publicclassEndLessLoop{publicstaticvoidmain(String[]args){//掌握死循环写法//for(;;){//System.out.println("ss");//}//while(true){//System......
  • Java集合框架之:LinkedList的常见方法使用
    ✨前言✨本篇文章主要介绍JavaLinkedList的使用方法教程及示例代码......
  • java基础学习:do-while循环
    1. packagecom.itheima.loop;publicclassDowhile1{publicstaticvoidmain(String[]args){inti=0;do{System.out.println("1");i++;}while(i<3);}} ......
  • 秦疆的Java课程笔记:46 方法 方法的定义和调用
    Java方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:修饰符返回值类型方法名(参数类型参数名){//这一串就是方法头 …… 方法体 …… return返回值;}方法包含一个方法头和方法体。下面是一个方法的所有部分:......