1. 程式人生 > >java去重List的contains()方法

java去重List的contains()方法

實踐過程中需要用到java中list去重,故打算採用contains()方法,

1.若為List<某類>則需在該類中重寫equals()方法,及hashCode()方法

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;


相關推薦

Java陣列Arrays.fill方法

Java陣列Arrays.fill()方法 Java API  中的 Fill    public static void fill(Object[] a,  int fromIndex,  int toIndex,   Object val)將指定的 Object 引用分

java的Collections.sort方法使用

conllections.sort()可以排序List、List、List<包裝類>,還可以是List<自定義的物件> (一)通過Collections.sort()方法,對i

javaList的contains方法

實踐過程中需要用到java中list去重,故打算採用contains()方法, 1.若為List<某類>則需在該類中重寫equals()方法,及hashCode()方法 2.具體重寫程式碼: package com.fit; import java.

學以致用——Java原始碼——對使用者輸入進行處理Duplicate Elimination

發現之前的程式碼與需求有一定出入,所以改寫了一下: 1. 如果使用者輸入不重複的值,顯示該值,否則提示使用者重複輸入,不顯示該值 2. 使用了增強for語句(enhanced for statement)遍歷陣列 3. 僅列印不重複值 上一個版本的程式碼參考: https:/

每日一python3:python 中對list的兩種方法

在python相關職位的面試過程中,會對列表list的去重進行考察。(注意有時會要求保證去重的順序性) 方法1:直觀方法 思路:先建立一個新的空列表,通過遍歷原來的列表,再利用邏輯關係not in 來去重 程式碼: #coding:utf-8 ll = [

史上最全JavaScript陣列的十種方法推薦

一、前言: 我們在實際工作中,或者在面試找工作時,都會用到或者被問到一個問題,那就是“陣列如何去重”。是的,這個問題有很多種解決方案,看看下面的十種方式吧! 二、陣列去重方式大彙總: Methods 1: 思路:定義一個新陣列,並存放原陣列的第一個元素,然後將元素組一一和新陣列的元素

js 數組的三種方法unique

arr 個數 func () 方法 表數 undefined 唯一性 當前 方法一: Array.prototype.unique=function(){   var arr=[];//新建一個臨時數組   for(var i=0;i<this.length;i

ArrayList中remove方法刪除長度大於5的元素之後下標定位的問題

com 有一個 fad 就刪除 成了 位置 p s cnblogs 中心 1、問題闡述 需求: 有一個ArrayList數組,要求刪除長度大於5的字符串,如:arr = {"ab1","123ad","bca","dadfadf","dddaaa","你好啊","我來

Java集合框架上機練習題:編寫一個Book類,該類至少有name和price兩個屬性。該類要實現Comparable接口,在接口的compareTo方法.....

ext .cn 數據庫 識別 方法 屬性 set package compareto 編寫一個Book類,該類至少有name和price兩個屬性。該類要實現Comparable接口,在接口的compareTo()方法中規定兩個Book類實例的大小關系為二者的price屬性的

elastic search6.2.2 實現用戶搜索記錄查詢、排序

replicas pos 結果 etime rep col cas rms idt elastic search6.2.2 實現搜索記錄查詢 ,類似新浪微博這種,同樣的搜索記錄後面時間點的會覆蓋前面的(主要思路:關鍵詞去重,然後按時間排序) 先創建索引 //我的搜索

js算法初窺03簡單搜索及算法

二分搜索 href map 能力 target 新增 一起學 第一次 ==   前面我們了解了一些常用的排序算法,那麽這篇文章我們來看看搜索算法的一些簡單實現,我們先來介紹一個我們在實際工作中一定用到過的搜索算法——順序搜索。 1、順序搜索   其實順序搜索十分簡單,我們還

Java 007 面向物件構造方法、static關鍵字、JDK幫助文件、Math類

知識點梳理 心得體會 小知識點 1.不同型別的靜態變數 1>靜態變數是基本資料型別時,類的外部不用建立該類例項可以能直接使用 2>靜態變數是引用時,即靜態變數是一個物件的引用,必須先初始化這個物件,才能將引用指向靜態變數 2.靜態成員與例項成員 1&

JAVA中Object類的toString方法

toString public String toString() 返回該物件的字串表示。通常,toString 方法會返回一個“以文字方式表示”此物件的字串。結果應是一個簡明但易於讀懂的資訊表示式。建議所有子類都重寫此方法。 Object 類的 toS

Java 的equals方法 和 == 的區別和聯絡

淺談Java中的equals和==  在初學Java時,可能會經常碰到下面的程式碼: String str1 = new String("hello"); String str2 = new String("hello"); System.out.print

W3Cschool高階指令碼演算法5.排列組合演算法挑戰

排列組合去重演算法挑戰 問題: 把一個字串中的字元重新排列生成新的字串,返回新生成的字串裡沒有連續重複字元的字串個數.連續重複只以單個字元為準 例如, aab 應該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa), 但是隻有兩

Java面試題每日兩題9.28—如何實現在main方法執行前輸出“Hello World”

  眾所周知,在 Java語言中,main()方法是程式的入口方法,在程式執行時,最先載入的就是main()方法,但這是否意味著main()方法就是程式執行時第一個被執行的模組呢?   答案是否定的。在Jawa語言中,由於靜態塊在類被載入時就會被呼叫,因此可以在main()方

java第18天----生產者消費者,Lock鎖,守護執行緒,join方法

昨天知識總結: 多執行緒 執行緒的兩種建立方式 建立Thread的子類 執行緒與任務分離 執行緒安全----重點 單例中執行緒安全的應用 執行緒的停止 執行緒 執行緒的通訊 執行緒的通訊: 分析: 需要兩個執行緒—輸入執行緒,和輸

Java Object類中克隆clone方法的使用

測試程式碼 package test04; // // protected Object clone()建立並返回物件一個副本。因為是protected型別的方法,只能在子類訪問 // 如果使用clone(),需要重寫此方法。 // 注意和Student

js中陣列常用邏輯演算法從大到小,從小到大排序,等問題

從小到大: // 從小到大順序排序 minSort (arr) { var min for (var i = 0; i < arr.length; i++) { for (var j = i; j < arr.le

Java 集合List及Map中forEach方法

我們先看一個forEach()方法遍歷List集合的例子: //使用com.google.guava包建立集合 List<String> list =Lists.newArrayList("a","b","c","d");