1. 程式人生 > >set儲存物件出現重複的解決辦法

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();
			}
		}	
	
	}






相關推薦

set儲存物件出現重複解決辦法

package com.student.vo; public class people { private int id; private String name; private String tel; public people(int id,String n

VS2008打上SP1的補丁後安裝了silverlight後出現未將物件引用設定到物件例項的解決辦法

新建silverlight專案失敗,提示 未將物件設定到例項 的解決辦法: 1.開啟 visual studio 命令提示 輸入一下命令:2.devenv /resetskippkgs ,這條命令會啟動visual stuio ;關閉visual studio,然後輸入下面的命令:3.devenv /set

Java連結Redis時出現 “ERR Client sent AUTH, but no password is set” 異常的原因及解決辦法

第一種情況: 在redis.conf中設定了密碼,而且redis還啟動了,為什麼說沒有密碼呢? linux下啟動redis有很多種方法, 方式一: ./redis-server &   這種方法啟動,不會帶上你的redis.conf配置檔案啟動 方式二:還有

Java連線Redis時出現 “ERR Client sent AUTH, but no password is set” 異常的原因及解決辦法

給redis設定過auth後發現還是出現這種情況,這是由於啟動redis時自動載入的redis配置檔案並不是我們配置的那個,我在服務中找到redis: 右擊redis選擇屬性 這裡發現redis啟動時使用我們之前配置在環境變數裡的.exe檔案,先將服務停止

Java鏈接Redis時出現 “ERR Client sent AUTH, but no password is set” 異常的原因及解決辦法

edit 解決 apach 重新啟動 cti cau 文本編輯 cto coder Java鏈接Redis時出現 “ERR Client sent AUTH, but no password is set” 異常的原因及解決辦法 【錯誤提

AngularJs ng-repeat解決迴圈物件出現重複項報錯的問題

問題:ng-repeat  的迴圈物件是不能出現重複項的,所以如果有重複的就會報錯,應該是 key value的問題吧,不是很瞭解內部執行機制;經過查詢發現 在 迴圈後面加上  track by $index 就會解決問題,也就可以有重複物件了 報錯:   劃

DataGrid儲存資料時出現錯誤解決辦法.

解決辦法:前臺設定DataGridDataKeyField="ID"錯誤提示:Server Error in '/News' Application. Index was out of range. Must be non-negative and

Fedora19啟動時“出現無法應用原儲存的顯示器配置”解決辦法

自定義了個1600x900的解析度,在gnome3的系統設定裡儲存了。 重啟後開機登入後提示“出現無法應用原儲存的顯示器配置”。 解決辦法: 刪掉~/.config/monitors.xml。 重新登入。

Word 圖片無法顯示,出現對話方塊:錯誤,嵌入物件無效的解決辦法

    貼上到word中的圖片或插入Word中的圖片,突然無法顯示,說是“錯誤,嵌入物件無效”,前一段時間剛剛整理好的資料,當時還能用,我還列印了出來。現在有圖片的地方卻出現的是一個醒目的大紅叉。列印預覽也無法顯示,從其他地方複製貼上過來的圖片也是無法顯示,以前這種功能在word中是能應用的。更奇怪的是同樣的

php程序上傳網站logo出現錯誤解決辦法

文件夾權限 php程序 設置 emp nbsp warn ror ora 文件夾創建 工作中遇到的問題,我都會一一解決,並把解決辦法發到這裏來。上傳網站logo出現錯誤:php warning: file upload error unable to creatr a

Asp.net MVC利用WebUploader上傳大文件出現404解決辦法

老版本 spa strong request 上傳大文件 net conf alt 新版 剛開始我上傳小文件都是比較順利的,但是上傳了一個大文件大約有200M的壓縮包就不行了。在chrome裏面監視發現網絡狀態是404,我分析可能不是WebUploader的限制,應該是We

Fragment關閉再開啟 控制元件儲存值的問題 尤其是EditText 儲存原來值的解決辦法

今天解決了一個自認為比較棘手的bug。特別記錄在此。 背景: 該介面是一個fragment,fragment中有一個EditText控制元件。出現的問題是,我第一次進入該fragment, 在edittext控制元件輸入內容,然後返回到該fragemnt之前的介面, 接著再次返

iOS 12.1 UITabbar從二級頁面pop時出現偏移解決辦法

問題描述 在iOS12.1中,當UITabbar的translucent屬性為YES時,push viewController時設定控制器hidesBottomBarWhenPushed = YES會出現此問題。 問題討論 討論詳情見 此處 解決辦法 自定義UITabba

CoordinatorLayout 巢狀Recyclerview在巢狀Recyclerview滑動出現衝突解決辦法

RecyclerView巢狀RecycleView  要做一個介面,CoordinatorLayout巢狀AppBarLayout和RecyclerView來實現摺疊滑動,我的RecycleView裡面佈局較多,計劃再嵌入RecyclerView來實現,當我用到RecyclerView新增

ElasticSearch6.0安裝head外掛出現問題解決辦法

1、安裝head外掛 需要注意的是下載的head專案不要在ElasticSearch安裝目錄下,重新起一個目錄。 這裡可以參考其他人的部落格: http://blog.csdn.net/llwwlql/article/details/77162277 2、安裝完成後可能出現的問題: h

iOS 12 tabbar 從二級頁面返回時,出現跳動解決辦法

APP push一個介面,返回的時候,tabBar上的圖示和文字出現一個從上往下的神奇動畫 經過測試發現,如果使用系統OS12.1 UINavigationController + UITabBarController( UITabBar 磨砂),在popViewControllerAni

關於生成二維碼導致顯示不出來 vivo手機出現問題解決辦法

https://github.com/tomfriwel/weapp-qrcode qrcode = new QRCode('canvas_' + i, { text: qrCode, colorDark: "#000000", colorLight: "#FFFFFF",

Xshell登入linux主機出現WARNING!解決辦法

使用Xshell登入Linux主機時出現了一行警告,警告如下: WARNING! The remote SSH server rejected X11 forwarding request. 解決辦

1. [轉] 命令列裡 pip list 執行時出現DEPRECATION 解決辦法

[轉]命令列裡 pip list 執行時出現DEPRECATION 解決辦法 報錯內容: DEPRECATION: The default format will switch to columns in the future. You can use –format=(legacy|c

jsp登入頁面密碼equals驗證出現問題解決辦法

從資料庫中取出的密碼或者使用者名稱後會帶有一串的空格 所以equals比較時會顯示錯誤 使用trim()函式去除空格就可以了 執行成功程式碼如下: login.jsp <%@ page import="java.sql.*" language="java" contentT