set存储对象出现重复的解决办法

package com.student.vo;

public class people {
	private int id;
	private String name;
	private String tel;
	public people(int id,String name,String tel){
		this.id=id;
		this.name=name;
		this.tel=tel;
	}
    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof people)) {
            return false;
        }
        people b = (people)obj;
        if(this.id == b.id) {
            return true;
        }
        return false;
    }
    
    @Override
    public int hashCode() {
        return id;
    }
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
}

新建一个people类,在类中重写了HashSet的HashCode、equals方法,读者写的时候可以直接把代码截取粘贴到你自己想用的类中,HashCode方法中的id相当于主键也就是键值,只能是唯一的,HashSet为按照这个id判断是否是同一个对象进行去重操作。

我这边调用是在servlet中引用此类

package com.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.student.dao.impl.UserDAOImpl;
import com.student.factory.DAOFactory;
import com.student.vo.User;
import com.student.vo.people;

public class studentFind extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		String id=new String(request.getParameter("id").getBytes("iso-8859-1"),"utf-8");
		String username=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
		//list vector存的值可以重复因此改用set
		Vector<User> vector=new Vector<User>(); 
		Vector<User> vector1=new Vector<User>();
		Vector<User> vector2=new Vector<User>();
		Vector<User> vector3=new Vector<User>();
		//采用hashset存储自定义的对象,之前试过用treeMap做了两三个小时都没有把键作为对象存储,总会报类型转换错误
		try {
				//按照优先级查询 姓名、电话号码、性别
				if(!id.equals("")){
				vector=DAOFactory.getUserDAOinstance().findName(id,username);
				vector1=DAOFactory.getUserDAOinstance().findTel(id,username);
				vector2=DAOFactory.getUserDAOinstance().findSex(id,username);
				vector3=DAOFactory.getUserDAOinstance().findPinyin(id,username);
				Set<people> set = new HashSet<people>();
				for(int i=0;i<vector.size();i++){
					User user=new User();
					user=vector.get(i);
					int yy=Integer.valueOf(user.getId());
					set.add(new people(yy,user.getName(),user.getTel()));
				}
				for(int i=0;i<vector1.size();i++){
					User user=new User();
					user=vector1.get(i);
					int yy=Integer.valueOf(user.getId());
					set.add(new people(yy,user.getName(),user.getTel()));
					//System.out.println(user.getName()+"+"+user.getId());
					
				}
				for(int i=0;i<vector2.size();i++){
					User user=new User();
					user=vector2.get(i);
					int yy=Integer.valueOf(user.getId());
					set.add(new people(yy,user.getName(),user.getTel()));
				}
				for(int i=0;i<vector3.size();i++){
					User user=new User();
					user=vector3.get(i);
					int yy=Integer.valueOf(user.getId());
					set.add(new people(yy,user.getName(),user.getTel()));
				}
		        for(people p : set){
		            System.out.println(p.getName()+"+"+p.getId());
		        }
				request.setAttribute("rs", set);
				request.getRequestDispatcher("ajaxShow.jsp").forward(request, response);
				}
		}
			catch (Exception e) {
				e.printStackTrace();
			}
		}	
	
	}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值