學習筆記-JAVA-考點10-什麼情況下需要重寫equals和hashcode()兩個方法?
一、什麼情況下需要重寫equals和hashcode()兩個方法?
1、加入到hashset中的自定義類的物件,為確保他們不重複,需要對他們的類重寫equals()和hashcode()的方法。
如果不重寫equals,相同內容不同引用的物件會被當做不同的物件被加入到hashset中。
重寫equals()的示例程式碼:
public boolean equals(Object obj){//這裡不可以寫成自定義型別自定義型別引用,這樣集 <span style="white-space:pre"> </span> //合框架的底層不會呼叫這個過載的方法。 <span style="white-space:pre"> </span>if(!(obj instanceof Person)){ <span style="white-space:pre"> </span>return false; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>Personp =(Person)obj; <span style="white-space:pre"> </span>//用來檢視equals方法是否被呼叫 <span style="white-space:pre"> </span>sop(this.name +".......equals......."+ p.name); <span style="white-space:pre"> </span>//認為名字相同並且年齡一樣大的兩個物件是一個 <span style="white-space:pre"> </span>return this.name.equals(p.name) && this.age == p.age; }
測試結果:
【結論】迴圈迭代結果:a2::12被列印了兩次,說明重複的元素new Person("a2", 12)被新增到集合中去。沒有保證HashSet的唯一性。
同時equals沒有被呼叫,說明僅僅重寫equals方法沒起到作用
二、不是重寫equals就夠啦嗎,為什麼這裡還要重寫hashcode()?
答:hashset在儲存物件時,先判斷兩個物件的hash值是否一樣,只有在hashcode()相等的前提下equals()也相等,才認為兩個物件時同一個。
重寫hashcode的示例程式碼:
public int hashCode(){ sop(this.name +"......hashCode"); return this.name.hashCode() + 29*age; } |
三、ArrayList的機制又是怎樣的?
[1]. HashSet判斷、刪除和新增元素等操作依據的是被操作元素所在的類的hashCode()和equals( )這兩個方法。
[2]. ArrayList做同等的操作,依據的僅僅是equals( )方法
相關推薦
學習筆記-JAVA-考點10-什麼情況下需要重寫equals和hashcode()兩個方法?
一、什麼情況下需要重寫equals和hashcode()兩個方法? 1、加入到hashset中的自定義類的物件,為確保他們不重複,需要對他們的類重寫equals()和hashcode()的方法。 如果不重寫equals,相同內容不同引用的物件會被當做不同的物件被加入到has
web前端學習(二)html學習筆記部分(10)-- HTML5構建應用佈局和頁面
1.2.25 HTML5構建應用佈局和頁面 1.2.25.1 HTML5在移動開發中的準則 1.儘量使用單頁面開發 2.慎重選擇前端UI框架 3.動畫、特效使用準則(60fps) 瀏覽器消耗最小的css屬性 位置 -&n
tornado學習筆記(三):子類需要重寫的RequestHandler的方法
問題 tornado.web.RequestHandler中哪些方法有必要在子類中重寫? 解決方案 參考tornado的原始碼,可以得到我們需要在子類中重寫的方法 示例 下面列出Req
MyBatis學習筆記(六)一對多的關聯查詢和傳遞多個引數
首發於我的部落格 和尚的部落格 本文講解一對多的關聯查詢,傳遞多個引數。 1.傳遞多個引數 當你的形參傳遞>1個的時候,parameterType不寫,讓其自動處理 #{值},預設為arg0,arg1…..或param1,param2,,,
java 重寫equals和hashCode方法原則
根據《effective java》第七條之規定:在改寫equals的時候遵守通用約定 當符合以下條件時不需要重寫equals方法: 1. 一個類的每一個例項本質上都是唯一的。 2. 不關心一個類是否提供了“邏輯相等”的測試功能 3.
Ubuntu14.4下怎麼安裝anaconda2和anaconda3兩個版本
參見了某個大佬的方法: 我之前安裝過anaconda2,但是由於做cs231n上面的程式碼需要3.5或者3.6,所以我就在官網上下載了新的版本的anaconda3,我們在官網下載的是sh檔案,我第一次直接在Ubuntu環境下執行這個命令,發現很多都出錯了,於是我就rm -
Java學習筆記(第10天)
表格是最常用的資料統計元件之一,是由多行和多列組成的二維表形式,在Swing中的JTable類實現表格。javax.swing.JTable類建立的物件是一個表格,可以使用以下兩種方式建立表格。(1)使用列名陣列的資料陣列建立表格,使用JTable類的構造方法可以根據指定的列
【Java學習筆記】54:CentOS下安裝MySQL的JDBC驅動並嘗試連線
準備工作 開啟MySQL服務 [root@hostlzh lzh]# mysqld_safe & [1] 21768 [root@hostlzh lzh]# 180209 12:55:11 mysqld_safe Logging to '/var
機器學習演算法在什麼情況下需要歸一化?
機器學習模型被網際網路行業廣泛應用,一般做機器學習應用的時候大部分時間是花費在特徵處理上,其中很關鍵的一步就是對特徵資料進行歸一化,為什麼要歸一化呢?維基百科給出的解釋:1)歸一化後加快了梯度下降求最優解的速度;2)歸一化有可能提高精度。下面我簡單擴充套件解
java學習筆記——java中對象的創建,初始化,引用的解析
初始 學習筆記 style article 學習 base 表達 如果 bsp 如果有一個A類。 1、例如以下表達式: A a1 = new A(); 那麽A是類,a1是引用。new A()是對象。僅僅是a1這個引用指向了new A()這個對象。 2、又如: A
學習筆記--Java
ade layout erl har 從0到1 rec cas 時間 implement //輸入輸出Scanner in = new Scanner(System.in);int a = in.nextInt();int b = in.next();System.out.
【extjs6學習筆記】1.10 初始: 定義類
ria nbsp src clas -1 學習 ref 定義類 mage http://www.extjs-tutorial.com/extjs/define-new-class-in-extj
MongoDB Java 學習筆記 (Java操作MongoDB)
sdn 學習筆記 style god java 學習 筆記 b- 學習 .net 原文地址:http://blog.csdn.net/ererfei/article/details/50857103 參考文檔:http://www.runoob.com/mongodb/mo
Kafka學習筆記-Java簡單操作
interrupt new repl simple and cto seed blog false 轉自:http://www.cnblogs.com/edison2012/p/5759223.html Maven依賴包: <dependency>
Groovy學習筆記-Java 5新特性支持
analyze port static ring leg break main uniq size 1.枚舉enum enum CoffeeSize{ SHORT, SMALL, MEDIUM, LARGE, MUG
QT學習筆記(13) QT下的UDP通信
組播 create pan int cor 通過 width widget window 一、UDP通信 UDP通信沒有明確的服務器端和客戶端之分 TCP通信像是打電話(必須要接通才能通信),UDP通信像是寫信(不管能不能收到都發送出去) 首先需要QUdpSOc
Docker學習筆記——Java及Tomcat Dockerfile
java tomcat dockerfile 1、Java Dockerfile創建項目目錄java,目錄下上傳所需java版本壓縮包,並創建Dockerfile文件,項目結構如下:java -Dockerfile -jdk-8u111-linux-x64.gzDockerfile內容:#
關系數據庫中,索引的作用主要有哪些,一般什麽情況下需要建索引?並簡述索引都有哪幾種類型,有何區別
出了 分組 臨時 key 全文索引 兩個 關系數據庫 情況下 普通 提高查詢速度,有利於排序和分組. (排序和分組如用不上索引,則會產生臨時表和filesort的過程) 根據業務邏輯,分析列查詢的頻度和順序, 建立索引和復合索引. 主鍵索引(primary key), --
學習筆記--Java消息中間件
應用 true ons discover 方式 new 鏈路 消息同步 con #### 消息中間件 消息中間件:關註於數據的發送和接受,利用高效可靠的異步消息傳遞機制集成分布式系統 JMS:Java消息服務,Java平臺中關於面向消息中間件的API AMQP:提供統一消息
Linux學習筆記4月10日任務
mariadb apache wget tar 4月10日任務11.6 MariaDB安裝11.7/11.8/11.9 Apache安裝擴展apache dso https://yq.aliyun.com/articles/6298apache apxshttp://man.chinaunix