注册就送108彩金

欢迎光临北大青鸟华大校区

  5分钟搞定JavaComparable接口

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

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

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

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

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

  我们要怎样对它们进行排序呢?#35838;?#20204;希望通过重量进行排序吗?如果是的话,排序是从轻到重还是从重到轻?当我们对它们进行排序的时候,我们需要反复比较两个?#36824;?#30340;重量,直到正确地排好所有的?#36824;F还?比?#36824;?重?那它比?#36824;?重吗?#35838;?#20204;需要?#27426;?#27604;较,直到完成排序。Comparable接口可?#22253;?#21161;我们实现这一目标。Comparable本身不能对对象进行排序,但接口定义的方法intcompareTo(T)可以。

  compareTo(T)如何工作

  让我们通过使用compareTo()方法来看看哪个?#36824;?#26356;重,开始吧。

  compareTo()方法的工作原理是返回一个int值或正,或负,或为零。它通过调用作为?#38382;?#30340;对象来比较对象。负数表示调用的对象比?#38382;?#36731;”。如果我们用大小来比较?#36824;?#37027;么上面的调用会返回一个负数,例如-400,因为红?#36824;?#27604;青?#36824;?#23567;。如果两个?#36824;?#37325;量相等,那么调用将返回0。如果红?#36824;?#26356;重,那么compareTo()将返回一个正数,例如68。

  compareTo()的灵活性

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

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

  他希望?#36824;?#22914;何进行排序?他希望我们比较什么特征?

  在那样的环境中,“小于?#20445;?#31561;于”和“大于”指的是什么意思?

  ?#37096;?#20197;使用多个特征,这个后面我们会讲。

  例1:通过重量排序?#36824;?/font>

  在一个例子中,我们将通过重量对?#36824;?#25490;序。只需要一行代码。

  Collections.sort(apples);

  例4

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

  让我们开始写?#36824;?#31867;吧。

  publicclassAppleimplementsComparable{

  privateStringvariety;

  privateColorcolor;

  privateintweight;

  @Override

  publicintcompareTo(Appleother){

  if(this.weight

  return-1;

  }

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

  return0;

  }

  return1;

  }

  }

  例5

  这是Apple类的一个版本。由于我们使用的是compareTo方法,并且正在排序?#36824;?#25152;以我实现了Comparable接口。在这一个版本中,我们通过重量比较对象。在我们的compareTo()方法中,我们写一个if条件,说明如果这个?#36824;?#30340;重量小于其他的?#36824;?#37027;么返回一个负数,为了保持简单,我们假定它为-1。请记住,这意味着这个?#36824;?#36731;于Apple‘other’。在if语句中,我们要说明,如果?#36824;?#37325;量相等,那么返回一个0。?#27604;唬?#22914;果这个?#36824;?#26082;不是更轻,又不是一样重,那就只能比其他?#36824;?#26356;重了。在这种情况下,我们返回一个正数,假定为1。

  例2:通过多个特征排序?#36824;?/font>

  正如我前面提到的,我们还可以使用compareTo()比较多个特征。比方说,我们通过?#20998;?#25490;序?#36824;?#20294;如果两个?#36824;?#26159;同一?#20998;鄭?#37027;么我们就按颜色排序。如果这两个特性相同,那么我们将按重量排序。虽然我们可以手动实现这件事,就像我在一个例子中做的那样,但是其实可以用一种简洁得多的方式实现。一般来说,是重用?#38047;?#30340;代码,而不是自己写。我们可以在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-10-08

来源:


 
  • 北大青鸟华大校区
  • 佛山华大校区
  • 厦门软件园校区
  • 厦门课工场
  • 北大青鸟华大校区
  • 地址:福州市仓山区北园路122号
  • 乘车路线:白湖亭、下濂、埔垱
  • 招生电话:0591-87880522????400-9966-370
  • 网址:www.rymjk.tw
  • 北大青鸟佛山华大校区
  • 地址:广东省佛山市禅城区祖庙路1号富荣大厦4楼
  • 乘车路线:旋宫?#39057;?#31449;、亲?#20107;?#31449;、松风路站、莲花站
  • 招生电话:0757-88726000????4006-989-522
  • 网址:www.foshanbdqn.com
  • 北大青鸟厦门软件园校区
  • 地址?#21512;?#38376;市思明区软件园二期观?#31456;?8号(IT实训32号)
  • 乘车路线:软件园站、软件园南门、软件园东二门站、观?#31456;?#21475;
  • 招生电话:0592-5920811????4000-470-150
  • 网址:www.xmbdqn.com
  • 北大青鸟厦门课工场
  • 地址?#21512;?#38376;市思明区软件园二期观?#31456;?8号(IT实训32号)
  • 乘车路线:软件园站、软件园南门、软件园东二门站、观?#31456;?#21475;
  • 招生电话:0592-5920811????4000-470-150
  • 网址:www.xmbdqn.com

北大青鸟华大校区公众?#29260;?#21488;

福州北大青鸟
注册就送108彩金 有没有人靠11选5赚钱 时时彩后三复式八码 重庆时时开彩结果 电子游戏娱乐 八人牛牛名牌抢庄技巧 广东时时11选五 广东时时玩法说明 山东麻将规则 麻将游戏单机 二十一点安卓游戏在线