java list<自定义对象>按对象的某个属性进行排序,和判断相等

来源:互联网 发布:淘宝老是要输入验证码 编辑:程序博客网 时间:2024/05/22 02:27

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()));    }@Overridepublic 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>接口 哪里代码写的有问题。。。

0 0
原创粉丝点击