java list按物件的某個屬性進行排序,和判斷相等
import java.io.Serializable; public class ContactItem implements Comparable<ContactItem>,Serializable { private String name; private String number; private String alpha; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getAlpha() { return alpha; } public void setAlpha(String alpha) { this.alpha = alpha; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { //按照你想要的方法去比較,比如我這裡比較的是姓名,號碼,相等就返回true if(!(obj instanceof ContactItem)) return false; ContactItem contactItem= (ContactItem)obj; return (this.getName().equals(contactItem.getName())&&this.getNumber().equals(contactItem.getNumber())); } @Override public int compareTo(ContactItem another) { if (another == null) { try { throw new Exception("該物件為空!"); } catch (Exception e) { e.printStackTrace(); } } if (!(this.getClass().getName().equals(another.getClass().getName().toString()))) { try { throw new Exception("該物件的類名不一致!"); } catch (Exception e) { e.printStackTrace(); } } if (!(another instanceof ContactItem)) { try { throw new Exception("該物件不是ContactItem的例項!"); } catch (Exception e) { e.printStackTrace(); } } ContactItem contactItem = (ContactItem) another; return this.getAlpha().compareTo(contactItem.getAlpha()); } }
關於排序:
1 : 格式, 實現Comparable<T>介面
應該這樣寫 public class ContactItem implements Comparable<ContactItem>
一開始看的其他人的文章,他居然是這樣寫的 public class Student<T> implements Comparable<T> ,雖然也不報錯,但是明顯不好看。。
2:重寫compareTo(ContactItem another) {}這個方法
3: 呼叫:Collections.sort(list);
關於判斷是否相等:
1:必須重寫equals(Object obj)方法和重寫hashcode()方法。
規範1:若重寫equals(Object
obj)方法,有必要重寫hashcode()方法,確保通過equals(Object obj)方法判斷結果為true的兩個物件具備相等的hashcode()返回值。
規範2:如果equals(Object
obj)返回false,即兩個物件“不相同”,並不要求對這兩個物件呼叫hashcode()方法得到兩個不相同的數。說的簡單點就是:“如果兩個物件不相同,他們的hashcode可能相同”。
根據這兩個規範,可以得到如下推論:
1、如果兩個物件equals,Java執行時環境會認為他們的hashcode
2、如果兩個物件不equals,他們的hashcode有可能相等。
3、如果兩個物件hashcode相等,他們不一定equals。
4、如果兩個物件hashcode不相等,他們一定不equals。
2:一開始怎麼都是false,原因是字串的判斷,我居然用了==,應該用.equals();好幼稚的錯,害我還以為是不是 實現Comparable<T>介面 哪裡程式碼寫的有問題。。。