java去重List的contains()方法

实践过程中需要用到java中list去重,故打算采用contains()方法,

1.若为List<某类>则需在该类中重写equals()方法,及hashCode()方法

(原因即必要性:http://bbs.csdn.net/topics/390620011?page=1

2.具体重写代码:

package com.fit;  
  
import java.util.HashMap;  
  
/** 
 * 身份证类 
 *  
 * @author ZYD 
 *  
 */  
public class Code {  
  
    /** 
     * 身份证号码,一旦确定就不能更改 
     */  
    private final int id;  
  
    public int getId() {  
        return id;  
    }  
  
    /** 
     * 通过构造方法确定身份证号码 
     *  
     * @param id 
     */  
    public Code(int id) {  
        this.id = id;  
    }  
  
    /** 
     * 重写equals()方法 
     */  
    public boolean equals(Object o) {  
        // 如果地址一样,则两个对象相同  
        if (this == o) {  
            return true;  
        }  
        // 如果两个对象是同一类型,则比较其属性值是否都相同。如果都相同,则说明两个对象也相同;否则,说明这两个对象不相同。  
        if (o instanceof Code) {  
            Code co = (Code) o;  
            boolean b = (co.id == this.id);  
            return b;  
        }  
        return false;  
    }  
  
    /** 
     * 重写hashcode()方法,以身份证号码作为hash码。 
     *  
     * @return 
     */  
    public int hashCode() {  
        return id;  
    }  
  
    /** 
     * 重写toString()方法 
     */  
    public String toString() {  
        return "【身份证】:" + id;  
    }  
      
    /** 
     * 测试 
     * @param args 
     */  
    public static void main(String[] args) {  
          
         HashMap<Code, Person> map = new HashMap<Code, Person>();  
           
         Person p1 = new Person(new Code(10001),"张三");  
         Person p2 = new Person(new Code(10002),"李四");  
           
         map.put(p1.getCode(), p1);  
         map.put(p2.getCode(), p2);  
           
         System.out.println("HashMap 中存放的人员信息:\n"+map);  
           
         //张三改名为张山,身份证号不变。  
         Person p3 = new Person(new Code(10001),"张山");  
         map.put(p3.getCode(), p3);  
           
         System.out.println("张三改名为张山后 HashMap 中存放的人员信息:\n"+map);  
           
         //查找身份证为10001 的人员信息  
         System.out.println("查找身份证为:10001 的人员信息:"+map.get(new Code(10001)));  
    }  
}  
  
/** 
 * 人类 
 * @author Administrator 
 * 
 */  
class Person {  
  
    /** 
     * 每一个成人都有一个身份证 
     */  
    private Code code;  
  
    /** 
     * 姓名 
     */  
    private String name;  
  
    public Code getCode() {  
        return code;  
    }  
  
    public void setCode(Code code) {  
        this.code = code;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public Person() {  
  
    }  
  
    public Person(Code code, String name) {  
        this.code = code;  
        this.name = name;  
    }  
  
    /** 
     * 重写equals()方法 当两个人得身份证号相同以及姓名相同时,表示这两个人是同一个人。 
     */  
    public boolean equals(Object o) {  
        if (o == this) {  
            return true;  
        }  
        if (o instanceof Person) {  
            Person p = (Person) o;  
            boolean b = this.code.equals(p.code) && this.name.equals(p.name);  
            return b;  
        }  
        return false;  
    }  
  
    /** 
     * 重写toString()方法 
     */  
    public String toString() {  
        return "【姓名】:" + name + "  ";  
    }  
}  
引用自: http://fhuan123.iteye.com/blog/1452275


3.使用contains()方法:

while(rs.next()){      
				Date date0 = rs.getDate("date");
				Time_Number time = new Time_Number();
				time.setTime(date0);
				time.setNumber(getOneTimeNumber(date0));
				if(!list0.contains(time)){
					list0.add(time);
//					System.out.println("uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + rs.getDate("date"));
//					System.out.println("uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + time.getNumber());	
				}else{
					continue;
				}
			};
4.时间Date类无法使用“==”故替换为compareTo()方法:

if(t.time.compareTo(this.time) ==0)//date中compareTo的用法。也是比较时间大小的,相等返回0,大于返回1,小于返回-1.
	return true;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值