国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - java中重寫equals()方法的同時要重寫hashcode()方法(詳解)

java中重寫equals()方法的同時要重寫hashcode()方法(詳解)

2020-10-28 15:06jingxian JAVA教程

下面小編就為大家帶來一篇java中重寫equals()方法的同時要重寫hashcode()方法(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

object對象中的 public boolean equals(Object obj),對于任何非空引用值 x 和 y,當且僅當 x 和 y 引用同一個對象時,此方法才返回 true;

注意:當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼。如下:

(1) 當obj1.equals(obj2)為true時,obj1.hashCode() == obj2.hashCode()必須為true

(2) 當obj1.hashCode() == obj2.hashCode()為false時,obj1.equals(obj2)必須為false

如果不重寫equals,那么比較的將是對象的引用是否指向同一塊內存地址,重寫之后目的是為了比較兩個對象的value值是否相等。特別指出利用equals比較八大包裝對象

(如int,float等)和String類(因為該類已重寫了equals和hashcode方法)對象時,默認比較的是值,在比較其它自定義對象時都是比較的引用地址 hashcode是用于散列數據的快速存取,如利用HashSet/HashMap/Hashtable類來存儲數據時,都是根據存儲對象的hashcode值來進行判斷是否相同的。

這樣如果我們對一個對象重寫了euqals,意思是只要對象的成員變量值都相等那么euqals就等于true,但不重寫hashcode,那么我們再new一個新的對象,當原對象.equals(新對象)等于true時,兩者的hashcode卻是不一樣的,由此將產生了理解的不一致,如在存儲散列集合時(如Set類),將會存儲了兩個值一樣的對象,導致混淆,因此,就也需要重寫hashcode()

舉例說明:

java" id="highlighter_975309">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.*;
 
public class HelloWorld {
  public static void main(String[] args) {
    /*
    Collection c = new HashSet();
    c.add("hello");
    c.add(new Name("f1","l1"));
    c.add(new Integer(100));
    c.remove("hello");
    c.remove(new Integer(100));
    System.out.println(c.remove(new Name("f1","l1")));
    */
    Name n1 = new Name("01");
    Name n2 = new Name("01");
    
    Collection c = new HashSet();
    c.add(n1);
    System.out.println("------------");
    c.add(n2);
    System.out.println("------------");
    System.out.println(n1.equals(n2));
    System.out.println("------------");
    System.out.println(n1.hashCode());
    System.out.println(n2.hashCode());
    System.out.println(c);
  }
 
 
}
 
class Name {
  private String id;
  public Name(String id) {
    this.id = id;
  }
  
  public String toString(){
    return this.id;
  }
  public boolean equals(Object obj) {
    if (obj instanceof Name) {
      Name name = (Name) obj;
      System.out.println("equal"+ name.id);
      return (id.equals(name.id));
    }
    return super.equals(obj);
  }
    
  public int hashCode() {
    Name name = (Name) this;
    System.out.println("Hash" + name.id);
    return id.hashCode();
      
  }
}

java中重寫equals()方法的同時要重寫hashcode()方法(詳解)

就這個程序進行分析,在第一次添加時,調用了hashcode()方法,將hashcode存入對象中,第二次也一樣,然后對hashcode進行比較。hashcode也只用于HashSet/HashMap/Hashtable類存儲數據,所以會用于比較,需要重寫

總結,自定義類要重寫equals方法來進行等值比較,自定義類要重寫compareTo方法來進行不同對象大小的比較,重寫hashcode方法為了將數據存入HashSet/HashMap/Hashtable類時進行比較

以上這篇java中重寫equals()方法的同時要重寫hashcode()方法(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 色av综合网 | 国产高清视频在线观看 | 精品一区二区三区免费 | 色视频在线免费观看 | 午夜播放器在线观看 | 伊人五月| 久久黄网站| 亚洲深深色噜噜狠狠网站 | 91中文字幕网 | 精品国产91亚洲一区二区三区www | 国产99久久精品一区二区永久免费 | 偷拍做爰吃奶视频免费看 | 久热久爱 | 久久久亚洲精品一区二区三区 | 成人在线观看av | 国产目拍亚洲精品99久久精品 | 国产高清精品在线 | 看污片网站 | 欧美一区二区三区精品 | 极品美女销魂一区二区三区 | 成人爽a毛片一区二区免费 久久久久亚洲精品 | 一区二区视频在线观看 | 色九九九| 欧美一区二区三区视频在线 | 欧美自拍小视频 | 日韩在线视频一区 | 免费大片黄在线观看 | 日韩欧美不卡 | 天堂在线免费视频 | 一区二区三区在线播放 | 国产三区av | 欲色视频| 色综久久 | 亚洲精品久久久久久久久久久 | 久久久91 | 亚洲精品视频在线免费 | 最新免费av网站 | 日韩国产在线看 | 亚洲精品久久久久中文字幕欢迎你 | 日韩欧美在线观看 | 亚洲黄色成人 |