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。 

这方面的文章参考:http://blog.csdn.net/chy800/article/details/7239838

2:一开始怎么都是false,原因是字符串的判断,我居然用了==,应该用.equals();好幼稚的错,害我还以为是不是 实现Comparable<T>接口 哪里代码写的有问题。。。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值