欢迎光临北大青鸟佛山华大校区,了解更多关于课程学费等请咨询在线老师!

5分钟搞定JavaComparable接口

  这篇文章是Java8课程中关于CleanCode原则的一部分。

  在这篇文章中,我们要聊一聊JavaComparable接口。

  还有一个不错的视频可以点这里。

  Comparable接口时用来干什么的呢?

  我们应该如何对事物进行比较和排序?这问题听上去有点莫名其妙,但我希望你认真考虑一下。

  我们要怎样对它们进行排序呢?我们希望通过重量进行排序吗?当我们对它们进行排序的时候,我们需要反复比较两个苹果的重量,直到正确地排好所有的苹果。苹果1比苹果2重?那它比苹果3重吗?我们需要不断比较,直到完成排序。Comparable接口可以帮助我们实现这一目标。Comparable本身不能对对象进行排序,但接口定义的方法intcompareTo(T)可以。

  compareTo(T)如何工作

  让我们通过使用compareTo()方法来看看哪个苹果更重,开始吧。

  compareTo()方法的工作原理是返回一个int值或正,或负,或为零。它通过调用作为参数的对象来比较对象。负数表示调用的对象比参数“轻”。如果我们用大小来比较苹果,那么上面的调用会返回一个负数,例如-400,因为红苹果比青苹果小。如果两个苹果重量相等,那么调用将返回0。如果红苹果更重,那么compareTo()将返回一个正数,例如68。

  compareTo()的灵活性

  如果我们反复调用上面的compareTo()方法,那么我们可以通过大小来排序,这很棒,但并非故事的结束。如果我们想通过颜色来给苹果排序呢?抑或是重量?我们也可以做到。关键是,我们的客户让我们叫他胖子农夫(见例3),需要在我们开始开发之前定义需要如何对苹果进行排序。

  他可以通过回答这两个问题来做到这一点:

  他希望苹果如何进行排序?他希望我们比较什么特征?

  在那样的环境中,“小于”,“等于”和“大于”指的是什么意思?

  也可以使用多个特征,这个后面我们会讲。

  例1:通过重量排序苹果

  在例子中,我们将通过重量对苹果排序。只需要一行代码。

  Collections.sort(apples);

  例4

  上面的代码行可以为我们做到所有的排序工作,只要我们事先定义好如何对苹果进行排序(这就需要多行代码了)。

  让我们开始写苹果类吧。

  publicclassAppleimplementsComparable{

  privateStringvariety;

  privateColorcolor;

  privateintweight;

  @Override

  publicintcompareTo(Appleother){

  if(this.weight

  return-1;

  }

  if(this.weight==other.weight){

  return0;

  }

  return1;

  }

  }

  例5

  由于我们使用的是compareTo方法,并且正在排序苹果,所以我实现了Comparable接口。我们通过重量比较对象。在我们的compareTo()方法中,我们写一个if条件,说明如果这个苹果的重量小于其他的苹果,那么返回一个负数,为了保持简单,我们假定它为-1。请记住,这意味着这个苹果轻于Apple‘other’。我们要说明,如果苹果重量相等,那么返回一个0。当然,如果这个苹果既不是更轻,又不是一样重,那就只能比其他苹果更重了。在这种情况下,我们返回一个正数,假定为1。

  例2:通过多个特征排序苹果

  正如我前面提到的,我们还可以使用compareTo()比较多个特征。比方说,我们通过品种排序苹果,但如果两个苹果是同一品种,那么我们就按颜色排序。如果这两个特性相同,那么我们将按重量排序。虽然我们可以手动实现这件事,就像我在一个例子中做的那样,但是其实可以用一种简洁得多的方式实现。一般来说,是重用现有的代码,而不是自己写。我们可以在Integer、String和枚举类中使用compareTo方法来比较值。由于我们没有使用Integer对象,用了int,所以我们不得不使用来自于Integer包装器类的一个静态的helper方法来比较两个值。

  publicclassAppleimplementsComparable{

  privateStringvariety;

  privateColorcolor;

  privateintweight;

  @Override

  publicintcompareTo(Appleother){

  intresult=this.variety.compareTo(other.variety);

  if(result!=0){

  returnresult;

  }

  

我的位置: 首页 >> 5分钟搞定JavaComparable接口

2018-09-30

来源:


 

在线答疑更多++

热门专题更多++

  • 佛山华大校区
  • 厦门软件园校区
  • 福州新生代校区
  • 厦门课工场
  • 北大青鸟佛山华大校区
  • 地址:广东省佛山市禅城区佛山大道北143号
  • 乘车路线:张槎路口站、白燕公园站、轻工路口站、金沙新城南门站
  • 招生电话:0757-88726000    4006-989-522
  • 网址:www.foshanbdqn.com
  • 北大青鸟厦门软件园校区
  • 地址:厦门市思明区软件园二期观日路48号
  • 乘车路线:软件园站、软件园南门、软件园东二门站、观日路口
  • 招生电话:0592-5920811    4000-470-150
  • 网址:www.xmbdqn.com
  • 北大青鸟福州新生代校区
  • 地址:福州市鼓楼区东大路150号
  • 乘车路线:塔头站、东水路口站、八方大厦站
  • 招生电话:0591-87880522    400-9966-370
  • 网址:www.0591bdqn.com
  • 北大青鸟厦门课工场
  • 地址:厦门市思明区软件园二期观日路48号(IT实训32号)
  • 乘车路线:软件园站、软件园南门、软件园东二门站、观日路口
  • 招生电话:0592-5920811    4000-470-150
  • 网址:www.xmbdqn.com

北大青鸟华大校区微信公众平台

佛山北大青鸟
      关注请扫我
     了解更多内容