进阶JavaSE-三大接口:Comparator、Comparable和Cloneable

public static void main(String[] args) {

Student student1 = new Student(“小明”, 10);

Student student2 = new Student(“小刚”, 5);

Student student3 = new Student(“彭于晏”, 28);

Student student4 = new Student(“胡歌”, 26);

Student[] array = new Student[4];

array[0] = student1;

array[1] = student2;

array[2] = student3;

array[3] = student4;

System.out.println("排序前: " + Arrays.toString(array));

Arrays.sort(array, new AgeCompare()); //以年龄进行排序

System.out.println("排序后: " + Arrays.toString(array));

}

}

最后输出的结果:

image-20211012152708784

Comparable接口示例:

//Comparable接口示例

class Student implements Comparable{

public String name;

public int age;

public Student(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

return this.name + " " + this.age;

}

@Override

public int compareTo(Student o) {

return this.name.compareTo(o.name); //以姓名进行排序

}

}

public class Demo2 {

public static void main(String[] args) {

Student student1 = new Student(“Tom”, 10);

Student student2 = new Student(“Emma”, 5);

Student student3 = new Student(“Alice”, 20);

Student student4 = new Student(“Kate”, 30);

Student[] array = new Student[4];

array[0] = student1;

array[1] = student2;

array[2] = student3;

array[3] = student4;

System.out.println(“排序前:” + Arrays.toString(array));

Arrays.sort(array); //以姓名进行排序

System.out.println(“排序后:” + Arrays.toString(array));

}

}

最终输出结果:

image-20211012153701172

注:String类里面的CompareTo方法,是按照字典序的大小进行比较。简单点说,每个字符都有相应的ASCII码值,这个方法会从头开始比较每个字符,如果前者小于后者,返回-1,相等返回0,大于就返回1。具体的注释可以查看帮助文档。

以上就是两个比较接口的使用,这两接口通常也叫做比较器

Cloneable接口:用于克隆的。

image-20211012154540768

也就是说,一个类要想实现克隆的功能,需要实现Cloneable接口,实现这个接口后,还必须自己手动的书写Object的clone方法。

切记:在没有实现接口的情况下,调用克隆方法,会抛出异常。

Cloneable示例

image-20211012164332692

通过person对象,调用克隆方法,就能实现克隆。那么问题来了,这是深拷贝还是浅拷贝?关于深拷贝浅拷贝,我前面有一篇文章讲过

深拷贝与浅拷贝

我们来看下面这一段代码,可能你就会更好理解这个Cloneable接口:

image-20211012170301410

上诉代码所对应的内存图如下:

image-20211012170736798

此时如果我们通过person1来改变money里面的值,那么person对象里面的也会被修改。因为本质上这两个对象的money值是指向同一块空间的。这也就是浅拷贝。

那么要实现深拷贝,该如何?

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:


《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
存中…(img-U4Jv2E2g-1712999305413)]

面试真题:

[外链图片转存中…(img-byut5LFC-1712999305413)]

[外链图片转存中…(img-D8bfrZei-1712999305414)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值