剑指offer(第二版)——赋值运算函数

PS:《剑指offer》是很多同学找工作都会参考的一本面试指南,同时也是一本算法指南(为什么它这么受欢迎,主要应该是其提供了一个循序渐进的优化解法,这点我觉得十分友好)。现在很多互联网的算法面试题基本上可以在这里找到影子,为了以后方便参考与回顾,现将书中例题用Java实现(第二版),欢迎各位同学一起交流进步。

GitHub: https://github.com/Uplpw/SwordOffer

剑指offer完整题目链接: https://blog.csdn.net/qq_41866626/article/details/120415258

1 题目描述

为自定义类添加赋值运算符函数。

2 思路

该题使用C++语言实现更加合适,因为Java不支持用户自定义操作符重载(尴尬了~)。不过流程以及细节都是一样的。下面是在实现时需要注意的四个细节:

(1)返回类型为该类型的引用类型。

(2)传入参数是不变的,需要使用常量引用,在Java即用 final 进行修饰。

(3)释放本实例内存(Java自带gc,故不需要主动释放内存,可以忽略)

(4)首先判断传入实例与本实例是否为同一个(在Java中需要分为引用相等、引用不等但值相等来判断),是则直接返回本实例引用,否则赋值再返回本实例引用。

3 代码

上面也说了Java不支持用户自定义操作符重载,所以只能依赖类中方法实现赋值运算。

以下是样例实现(有些缺陷,不能达到连续赋值的效果,即如果是a=b=c,该实现是不能让b拿到c的值):

public class MyAssignment {

    private String data;

    public MyAssignment(String data) {
        this.data = data;
    }
	
	// 注意传入参数final修饰符,以及传入引用与当前引用的比较,不需要主动释放内存,返回类型为引用类型
    public MyAssignment assign(final MyAssignment another) {
        if (this == another || this.data.equals(another.data))
            return this;
        else {
            this.data = another.data;
            return this;
        }
    }
	
	@Override
    public String toString() {
        return "data=" + data;
    }

    public static void main(String[] args) {
        MyAssignment str1 = new MyAssignment("111");
        MyAssignment str2 = new MyAssignment("222");
        MyAssignment str3 = new MyAssignment("333");
        str1.assign(str2).assign(str3);
        System.out.println("str1:" + str1.data);
        System.out.println("str2:" + str2.data);
        System.out.println("str3:" + str3.data);
    }
}

运行结果:

str1:data=333
str2:data=222
str3:data=333

参考
在解决本书例题时,参考了一些大佬的题解,比如leetcode上的官方、K神,以及其他的博客,在之后的每个例题详解后都会给出参考的思路或者代码链接,同学们都可以点进去看看!

本例题参考:

  1. https://www.jianshu.com/p/3f024a03176b

最后希望能和大家一起交流进步,拿到心仪的 offer !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值