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。
这方面的文章参考:http://blog.csdn.net/chy800/article/details/7239838
2:一开始怎么都是false,原因是字符串的判断,我居然用了==,应该用.equals();好幼稚的错,害我还以为是不是 实现Comparable<T>接口 哪里代码写的有问题。。。