比較器Comparator的試用
import java.util.*;
publicclass test {
publicstaticvoid main(String[] arg) throws Exception{
Integer a[]={21,31,1,9,5,10};//原始陣列
ComDown c=new ComDown();//定義比較器例項
Arrays.sort(a,c);//利用比較器控制排序
for(int i=0; i<a.length;i++) System.out.print(a[i]+"");//輸出
}
}
//派生Comparator介面的Integer型別類
class ComDown implements Comparator<Integer>{
publicint compare(Integer i1, Integer i2) {//實現compare方法
if(i1>i2) return-1;//控制逆序排列
elseif(i1<i2) return1;
elsereturn0;
}
} 從使用來看,比較器介面的應用可以構造一個通用的排序控制方法。上述程式碼就實現了對於Integer型別陣列的逆序排列。不過遺憾的是,由於Java中的泛型只能對物件操作,對於int一類的簡單型別不能象C++的模版一樣使用,所以對簡單型別的操作似乎反而不如直接寫排序方法簡單直接。不過比較器特別對於一些常規意義上不能排序的物件能夠實現排序,也能夠方便地進行重用,這是它的優點。如下例,就對自定義的一個Person類構造了依據姓名和年齡的兩個比較器,從而方便地實現了不能直接排序的Person物件的排序。
publicclass test ...{
publicstaticvoid main(String[] arg) throws Exception...{
Person a[]=new Person[2];
a[0]=new Person("ZhangSan",28);
a[1]=new Person("LiSi",19);
ComName cn=new ComName();
ComAge ca=new ComAge();
Arrays.sort(a,cn);
Arrays.sort(a,ca);
for(int i=0; i<a.length;i++) a[i].print();
}
}
class Person ...{
public String name;
publicint age;
Person(String n, int a) ...{
name=n;
age=a;
}
publicvoid print() ...{
System.out.println("Name is "+name+", Age is "+age);
}
}
class ComName implements Comparator<Person>...{
publicint compare(Person p1, Person p2) ...{
return p1.name.compareTo(p2.name);
}
}
class ComAge implements Comparator<Person>...{
publicint compare(Person p1, Person p2) ...{
if(p1.age>p2.age) return-1;
elseif(p1.age<p2.age) return1;
elsereturn0;
}
} 下面則是利用字串中數字所標示的位置來控制int陣列中比較元素的二維陣列排序比較器:
import java.util.*;
publicclass test {
publicstaticvoid main(String[] arg)throws Exception {
int ary[][]={{2,5,1,0,6},{6,9,4,8,5},{3,6,4,7,5},{2,3,1,5,7}};
sort2 s=new sort2("0213");
Arrays.sort(ary,s);Arrays.sort(ary,s);
for(int[] a:ary) {
for(int i:a) System.out.print(i+"");
System.out.println();
}
}
}
class sort2 implements Comparator<int[]>{
private String ss;//控制比較位置的字串
privateint ind=0;//控制字串索引
public sort2(String s){ss=s+"0";}
publicint compare(int a[], int b[]) {
int r;
if(a[Integer.parseInt(ss.substring(ind,ind+1))]>b[Integer.parseInt(ss.substring(ind,ind+1))])
r=1;
elseif(a[Integer.parseInt(ss.substring(ind,ind+1))]<b[Integer.parseInt(ss.substring(ind,ind+1))])
r=-1;
else r=0;
ind++;
if(ind>=ss.length()) ind=0; //如果比較完成,初始化ind為0
return r;
}
}
相關推薦
比較器Comparator的試用
近段時間有空就在熟悉Java,所以也常常在CSDN上看看相關的帖子。那天有人問如何利用Arrays的sort方法實現對int陣列的逆序排列,自然可以直接寫這麼一個逆序排列函式,不過由於Arrays的sort還可
類的可比較性Comparable和比較器Comparator
string fault nts font nal 返回值 extends 方式 ret 1. Comparable Comparable源碼如下: public interface Comparable<T> { public int compareT
比較器Comparator的底層結構淺談
查API可知,介面 Comparator<T>存在於java.util包中,可以知道此介面所處的包是非常實用,我們的比較器見名知意,肯定是用於比較的,在Java1.6的API中有這麼一句話:public interface Comparator<
Java Map集合利用比較器Comparator根據Key和Value的排序
TreeMap排序 根據Key進行排序 Map的根據key排序需要用到TreeMap物件,因為它是預設按照升序進行輸出的,可以使用比較器compareTo對它進行降序排序,Comparator可以對集合物件或者陣列進行排序的比較器介面,實現該介面的public compa
【Java學習筆記】45:優先順序佇列PriorityQueue和比較器Comparator
模擬程序排程時的優先數法和簡單時間片輪轉法,前者可以為程序設定以優先數PRIORITY為優先順序,為了更好地併發,每次獲得處理機後優先數減少3而重新選取。 在簡單輪轉法中則僅僅是一個普通佇列,按照FIFO的方式出隊獲得處理機。 如果要使用比較器Compara
比較器Comparator
Comparator介面 java中有內建的排序,Arrays.sort(),現在我有一個Student類,類中三個成員變數name,id,age,我現在想以age作為參考進行升序排序,應該如何做,很簡單,只需要自己定義一個類實現Comparator介面即可 i
比較器comparator,compare函式升序、降序原始碼分析
0、前言 一直想不明白,compare函式如何通過返回值,就確定是升序還是降序呢,於是乎決定好好的先看看原始碼。 下面的程式碼實現了對自己寫的Students類按照年齡升序的排序,就是通過對實現comparator介面,重寫compare的方法,實現
比較器Comparator 和 Comparable的簡單區別
1,簡介 最近在刷題的時候需要用到對自定義的類進行排序,於是想到了實現比較器介面,發現有comparator和conparable兩個比較器介面,具體分析一下兩者的區別。 例如現在
java-集合類(3)-實現比較器(Comparator)介面-LinkedList針對插入刪除、開始處增加元素
實現比較器(Comparator)介面 實現比較器例子: package ArrayList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collec
Java 物件比較器 comparator 的作用及用法
排序的演算法是我們最常用的演算法,初學程式,每個人都嘗試過排序。但只是侷限於簡單的排序。 如將下列數字進行排序 1,3,5,8,3,6 於是我們得出結果 1,3,3,5,6,8 將下列字母(字元)進行排序 a,i,e,f,w,s 於是我們得出結果 a,e,f,i,s,w 但
另一種比較器:Comparator
span 問題 com pre log implement nts face spa package comparatordemo.cn; import java.util.Comparator; /* * 一個對象的初期,並沒有實現comparable 接口,此時
常用的比較器:實現方式Compareable和Comparator
err 方式 pareto rri 編寫 sta urn getname rabl class Dog{ int size; int weight; public Dog(int s, int w){ siz
Java的Comparable內部比較器和Comparator外部比較器
正整數 seq pareto private 實現 結果 pack 單獨 post //這裏簡單介紹一下Java的Comparable內部比較器和Comparator外部比較器的用法實現 //那麽我們來做一個關於對象間的排序,首先建一個Model或者叫JavaBen。如下:
java.util下有一個Comparator(比較器)
ack list clas 必須 har ble sort rabl short java.util下有一個Comparator(比較器) 它擁有compare(),用來比較兩個方法。 要生成比較器,則用Sort中Sort(List,List(Compate)) 第二種方法
Java8 List去掉重複物件——contains方法、Comparator比較器
一、去除List中重複的String public List<String> removeStringListDupli(List<String> stringList) { Set<String> set = new LinkedHashSet<
java學習筆記13--比較器 Comparable Comparator
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Java中常用的比較器Comparable與Comparator
在公司實習了一段時間發現自己有些基礎知識理解的不是很清楚,今天把比較器的部分簡單總結一下! 有不對的歡迎指正! 需要為多個物件排序時必須設定規定的排序規則,排序規則可以通過比較器進行設定。Java提供兩種比較常用的比較器:Comparable和Compara
java comparator 排序 定義比較器內部類的方式排序 通用排序方式 非常靈活
class Products implements Comparable<Products> {private String name;private int num;private Integer price;public String getName()
Comparator比較器的使用,Map排序
專案開發過程中,總會遇到各種沒有遇見過的需求,今天遇到了一個map排序問題。 Map<String,Object> testMap = new HashMap<String,Object>(); KEY 值的規則是這樣的: xx
Java Comparable排序介面和Comparator比較器介面
實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.so