String類下compareTo()與compare()方法
阿新 • • 發佈:2019-01-07
這兩個方法經常搞混淆,現對其進行總結以加深記憶。
compareTo(Object o) //java.lang.Comparable<T>介面中的方法, //當需要對某個類的物件進行排序時,該類需要實現Comparable<T>介面的, //必須重寫public int compareTo(T o)方法, //比如MapReduce中Map函式和Reduce函式處理的 <key,value>, //其中需要根據key對鍵值對進行排序,所以,key實現了WritableComparable<T>介面, //實現這個介面可同時用於序列化和反序列化。 //WritableComparable<T>介面(用於序列化和反序列化)是Writable介面和Comparable<T>介面的組合; //判斷字串大小的依據是根據它們在字典中的順序決定的。 //如果引數字串等於此字串,則返回 0 值; //如果按字典順序此字串小於字串引數,則返回一個小於 0 的值; //如果按字典順序此字串大於字串引數,則返回一個大於 0 的值。 compare(Object o1,Object o2) //java.util.Comparator<T>介面的方法, //它實際上用的是待比較物件的compareTo(Object o)方法。
下面我們寫一來看看上面兩個方法是怎麼用的:
首先,寫一個User類,程式碼如下:
public class User implements Comparable<Object> { int id; String name; public User(int id, String name) { this.id = id; this.name = name; } /* * Getters and Setters */ public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Object o) { if (this == o) { return 0; } else if (o != null && o instanceof User) { User u = (User) o; if (id <= u.id) { return -1; } else { return 1; } } else { return -1; } } }
接下來,我們寫一個測試類Test:
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Test { //編寫Comparator,根據User的id對User進行排序 private static final Comparator<User> COMPARATOR = new Comparator<User>() { public int compare(User o1, User o2) { return o1.compareTo(o2); //運用User類的compareTo方法比較兩個物件 } }; public static void main(String[] args) { ArrayList<User> student = new ArrayList<User>(); User user1 = new User(10, "yueliming"); User user2 = new User(2, "xxxxx"); User user3 = new User(33, "fteerq"); User user4 = new User(14, "leoavs"); User user5 = new User(5, "inagwf"); student.add(user1); student.add(user2); student.add(user3); student.add(user4); student.add(user5); Collections.sort(student, COMPARATOR);//用我們寫好的Comparator對student進行排序 for (int i = 0; i < student.size(); i++) { System.out.println(student.get(i).getId()); } } }