java 比较两个对象,java中一个对象的大小

  java 比较两个对象,java中一个对象的大小

  这篇文章给你带来了一些关于java的知识。插入优先级队列的元素必须能够比较大小。如果大小不能比较,比如插入两个学生类型的元素,将会报告一个异常。下面是Java中比较两个对象大小的三种方法,希望对你有帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  

一. 为什么需要比较对象

  上一节介绍了优先级队列。插入优先级队列的元素必须能够比较大小。如果不能比较大小,比如插入两个student类型的元素,将会报告一个ClassCastException异常。

  示例:

  班级学生{

  字符串名称;

  int age

  公共学生(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  }

  公共类测试{

  公共静态void main(String[] args) {

  学生s1=新生(‘张三’,25);

  学生s2=新生(‘李四’,31);

  PriorityQueueStudent p=new priority queue();

  p . offer(S1);

  p . offer(S2);

  }

  }结果:

  原因:因为堆数据结构是用在优先级队列的最底层,所以在堆中插入元素时,需要对元素进行比较,而Student没有办法直接比较,所以抛出异常。

  

二. 元素的比较

  :

1. 基本类型的比较

  在Java中,可以直接比较基本类型的元素。

  公共类TestCompare {

  公共静态void main(String[] args) {

  int a=10

  int b=20

  system . out . println(ab);

  system . out . println(a==b);

  system . out . println(ab);

  char c1= a

  char c2= b

  system . out . println(C1==C2);

  system . out . println(C1 C2);

  system . out . println(C1 C2);

  布尔b1=真;

  布尔b2=假;

  system . out . println(B1==B2);

  System.out.println(b1!=B2);

  }

  }

2. 引用类型的比较

  级学生{

  字符串名称;

  int age

  公共学生(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  }

  公共类测试{

  公共静态void main(String[] args) {

  学生s1=新生(‘张三’,25);

  学生s2=新生(‘李四’,31);

  学生s3=s1

  system . out . println(S1==S2);//假

  system . out . println(S1==S3);//真

  //system . out . println(S1 S2);编译错误报告

  //system . out . println(S1 S3);编译错误报告

  }

  }从上面的结果来看,自定义类型无法进行比较,为什么可以用==进行比较?

  ==在比较自定义类型时,我们比较对象的地址是否相同。

  但是我们经常需要比较对象的内容,比如将一个对象插入优先级队列,根据对象的内容调整堆。怎么比较呢?

  

三. 对象比较的方法

  

1. equals方法比较

   Object class是每个类的基类,提供equals()方法比较内容是否相同。

  但是,默认情况下,Object中的equals方法比较with==,即比较两个对象的地址,因此,如果要使自定义类型具有可比性,可以重写基类的equals()方法。

  示例:

  班级学生{

  字符串名称;

  int age

  公共学生(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  @覆盖

  公共布尔等于(对象对象){

  if(this==obj){

  返回true

  }

  if(obj==null !(学生的对象实例)){

  返回false

  }

  学生s=(学生)obj

  return this . age==s . age this . name . equals(s . name);

  }

  }

  公共类测试{

  公共静态void main(String[] args) {

  学生s1=新生(‘张三’,25);

  学生s2=新生(‘李四’,31);

  学生s3=新生(‘李四’,31);

  system . out . println(S1 . equals(S2));

  system . out . println(S2 . equals(S3));

  }

  }结果:可以比较一下内容是否相同。

  重写equals方法的步骤

  如果两个对象的地址相同,返回真实的如果传入的对象为空,返回错误的如果传入的对象与调用的对象不是同一个类型,返回错误的如果内容都相同则返回没错,否则返回假注意事项

  等于()方法只能比较两个对象是否相同,不能按照,的方式来进行比较

  

2. 基于Comparable接口的比较

   对于引用类型,如果想按照大小的方式进行比较,在定义类时实现可比较的接口,然后在类中重写比较方法

  例:比较两个人的大小,一般按照年龄来比较

  类人实现相当的人{

  字符串名称;

  年龄

  公共人物(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  @覆盖

  公共国际比较(人)

  if(o==null){

  返回1;

  }

  返回这个。年龄-o .年龄;

  }

  }

  公共类测试1 {

  公共静态void main(String[] args) {

  人员p1=新人员(小王,22);

  人员p2=新人员(小张,21);

  人员p3=新人员(小方,22);

  系统。出去。println(P1。与(p2)相比);//0表示大于

  系统。出去。println(p2。与(P3)相比);//0表示小于

  系统。出去。println(P1。与(P3)相比);//==0表示相等

  }

  }比较方法是java。郎中的接口类,可以直接使用

  使用可比较的接口使得学生类型的对象可以插入到优先级队列中

  导入Java。util。优先级队列;

  班级学生实行对等学习{

  字符串名称;

  年龄

  公共学生(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  @覆盖

  公共国际比较(学生o) {

  if(o==null){

  return-1;

  }

  返回这个。年龄-o .年龄;

  }

  }

  公共类测试{

  公共静态void main(String[] args) {

  学生s1=新学生(张三,25);

  学生s2=新学生(李四,31);

  学生s3=新学生(李四,35);

  PriorityQueueStudent p=新优先级队列();

  p。要约(S1);

  p。要约(S2);

  p。要约(S3);

  }

  }结果:学生类型的对象也可以插入优先级队列中

  

3. 基于Comparator接口的比较

   按照比较器的方式比较具体步骤如下:

  创建一个比较器类,实现比较仪接口重写比较方法使用比较器使得学生类型的对象可以插入到优先级队列中

  导入Java。util。比较器;

  导入Java。util。优先级队列;

  班级学生{

  字符串名称;

  年龄

  公共学生(字符串名称,整数){

  this.name=name

  this.age=年龄;

  }

  }

  类学生比较仪实现比较研究{

  @覆盖

  公共(同Internationalorganizations)国际组织比较(学生o1,学生o2) {

  if(o1==o2){

  返回0;

  }

  if(o1==null){

  return-1;

  }

  if(o2==null){

  返回1;

  }

  返回O1。年龄-氧气。年龄;

  }

  }

  公共类测试{

  公共静态void main(String[] args) {

  学生s1=新学生(张三,25);

  学生s2=新学生(李四,31);

  学生s3=新学生(李四,35);

  PriorityQueueStudent p=新优先级队列(新学生比较器());

  p。要约(S1);

  p。要约(S2);

  p。要约(S3);

  }

  }结果:学生类型的对象可以插入到优先级队列中

  比较仪是java.util包中的泛型接口类,使用必须导入相应的包

  

4. 三种比较方式对比

   ken 0 @ 166 . com可比,比较器使用哪种比较方式呢?

  如果拿到的是别人定义的类,我们不能对类进行操作,就选用创建类实现比较仪接口的方法

  如果类是用户自己定义的类,可以对类进行操作,则采用实现可比较的接口的方法

  推荐学习: 《java视频教程》 以上就是总结分享爪哇比较两个对象大小的三种方法的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: