日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

think in java interview-高级开发人员面试宝典(三)

發(fā)布時(shí)間:2025/7/14 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 think in java interview-高级开发人员面试宝典(三) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

comparable接口與comparator

兩種比較接口分析


前者應(yīng)該比較固定,和一個(gè)具體類相綁定,而后者比較靈活,它可以被用于各個(gè)需要比較功能的類使用。


一個(gè)類實(shí)現(xiàn)了 Camparable 接口表明這個(gè)類的對象之間是可以相互比較的。如果用數(shù)學(xué)語言描述的話就是這個(gè)類的對象組成的集合中存在一個(gè)全序。這樣,這個(gè)類對象組成的集合就可以使用 Sort 方法排序了。


而 Comparator 的作用有兩個(gè):
1. 如果類的設(shè)計(jì)師沒有考慮到 Compare 的問題而沒有實(shí)現(xiàn) Comparable 接口,可以通過 Comparator 來實(shí)現(xiàn)比較算法進(jìn)行排序;
2. 為了使用不同的排序標(biāo)準(zhǔn)做準(zhǔn)備,比如:升序、降序或其他什么序。


在 “集合框架” 中有兩種比較接口: Comparable 接口和 Comparator 接口。

Comparable 是通用的接口,用戶可以實(shí)現(xiàn)它來完成自己特定的比較,而 Comparator 可以看成一種算法的實(shí)現(xiàn),在需要容器集合實(shí)現(xiàn)比較功能的時(shí)候,來指定這個(gè)比較器,這可以看成一種設(shè)計(jì)模式,將算法和數(shù)據(jù)分離。

來看樣例:

PersonBean類

[java]view plaincopy
  • <span style="font-size:12px;">publicclass PersonBean implements Comparable<PersonBean> { ?

  • public PersonBean(int age, String name) { ?

  • this.age = age; ?

  • this.name = name; ?

  • ? ?} ?

  • int age = 0; ?

  • ? ?String name = ""; ?

  • publicint getAge() { ?

  • return age; ?

  • ? ?} ?

  • publicvoid setAge(int age) { ?

  • this.age = age; ?

  • ? ?} ?

  • public String getName() { ?

  • return name; ?

  • ? ?} ?

  • publicvoid setName(String name) { ?

  • this.name = name; ?

  • ? ?} ?

  • publicboolean equals(Object o) { ?

  • if (!(o instanceof PersonBean)) { ?

  • returnfalse; ?

  • ? ? ? ?} ?

  • ? ? ? ?PersonBean p = (PersonBean) o; ?

  • return (age == p.age) && (name.equals(p.name)); ?

  • ? ?} ?

  • publicint hashCode() { ?

  • int result = 17; ?

  • ? ? ? ?result = 31 * result + age; ?

  • ? ? ? ?result = 31 * result + name.hashCode(); ?

  • return result; ?

  • ? ?} ?

  • public String toString() { ?

  • return (age + "{" + name + "}"); ?

  • ? ?} ?

  • publicint compareTo(PersonBean person) { ?

  • int cop = age - person.getAge(); ?

  • if (cop != 0) ?

  • return cop; ?

  • else

  • return name.compareTo(person.name); ?

  • ? ?} ?

  • } ?

  • </span> ?

  • AlphDesc類


    [java]view plaincopy
  • <span style="font-size:12px;">import java.util.Comparator; ?

  • publicclass AlphDesc implements Comparator<PersonBean> { ?

  • publicint compare(PersonBean personA, PersonBean personB) { ?

  • int cop = personA.age - personB.age; ?

  • if (cop != 0) ?

  • return cop; ?

  • else

  • return personB.getName().compareTo(personA.getName()); ?

  • ? ?} ?

  • } ?

  • </span> ?


  • TestComparable類


    [java]view plaincopy
  • <span style="font-size:12px;">import java.util.*; ?

  • publicclass TestComparable { ?

  • /**

  • ? ? * @param args

  • ? ? */

  • publicvoid compare() { ?

  • ? ? ? ?PersonBean[] p = { new PersonBean(20, "Tom"), ?

  • new PersonBean(20, "Jeff"), ?

  • new PersonBean(30, "Mary"), ?

  • new PersonBean(20, "Ada"), ?

  • new PersonBean(40, "Walton"), ?

  • new PersonBean(61, "Peter"), ?

  • new PersonBean(20, "Bush") }; ?

  • ? ? ? ?System.out.println("before sort:\n" + Arrays.toString(p)); ?

  • ? ? ? ?AlphDesc desc = new AlphDesc(); ?

  • ? ? ? ?Arrays.sort(p,desc); ?

  • ? ? ? ?System.out.println("after sort:\n" + Arrays.toString(p)); ?

  • ? ?} ?

  • publicstaticvoid main(String[] args) { ?

  • ? ? ? ?TestComparable tc = new TestComparable(); ?

  • ? ? ? ?tc.compare(); ?

  • ? ?} ?

  • }</span> ?




  • 每一篇不宜寫得過長,下篇繼續(xù)


    轉(zhuǎn)載于:https://blog.51cto.com/longx/1351868

    總結(jié)

    以上是生活随笔為你收集整理的think in java interview-高级开发人员面试宝典(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。