炸窩哈希值的原理

package asdfg;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class aaa {

public static void main(String[] args) {/*** 小提示:* 1.對于所有沒有索引的方法,我們都不能使用for循環進行遍歷* 2.提到接口,我們就應該想到他下面有多少個實現類,并且實現類的方法是怎樣使用的* 3.哈希表結構的速度是非常快的* 4.哈希表的順序是無序的* 5.可以通過重寫的方法使哈希值的值相等* * * Set接口簡介:* 1.Java.util.set接口和Java.util.list接口同樣繼承來自collection接口,與collection接口中的方法基本上是一樣的,* 并沒有對collectIon接口進行功能上的擴充,只是比collectIon接口在形式上更加嚴格,與lIst接口不同的是,Set接口中的元素* 是無序的,并且都會以某種規則保證存入的元素不出現重復* 2.Set接口的兩個集合:Hashset集合和HashmAP集合* * 小問題:* 1.Hashset是根據什么來確定元素在集合中的存儲位置的?具有什么功能?* 解釋:是根據對象的哈希值來確定元素在結合中的存儲位置,具有良好的存儲和查找性能,* 2.Hashset是如何保證元素在集合當中的唯一性的?* 解釋:保障元素唯一性的方式依賴于Hashcode方法與EQuals方法*//** Set接口的特點:* 1.不允許存儲重復元素* 2.沒有索引,沒有帶索引的方法也不能使用普通for循環進行遍歷;* * java.util.HashSet集合 implements(實現)set接口;* HshSet方法的特點:* 1.不允許存儲重復元素* 2.沒有索引,沒有帶索引的方法也不能使用普通for循環進行遍歷* 3.是一個無序的集合,存儲元素和起初元素的分析有可能不一致* 4.底層是一個哈希表結構,(查詢的速度是相當迅速的)* *///創建一個HashSet集合Set<Integer> set= new HashSet<>();//添加元素使用add方法set.add(1);set.add(3);set.add(2);set.add(1);		//1.使用迭代器進行遍歷set集合Iterator<Integer> it=set.iterator();//判斷是否有下一個while(it.hasNext()){//如果有的話,將下一個的值進行返回然后進行輸出Integer n=it.next();System.out.println(n);}//2.使用增強for遍歷for集合System.out.println("+++++++++++++++++++++");for(Integer i :set){System.out.println(i);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/*** HashSet集合存儲數據的結構使用的是哈希表,下面我們進行了解哈希值是怎么一回事* 哈希值:是一個十進制的整數 由系統隨機給值,是一個模擬地址,不是真實存在的,也就是邏輯上的地址值,注意:是邏輯地址值,而不是物理地址* * 如何獲取對象的哈希值?* 使用Object類當中的方法來獲取對象的哈希值* 該方法位于java.long.Object類中的hashcode()方法 其作用是返回該對象的哈希值碼* * *//*** hashcode方法的源碼:*  public native int hashCode();*  native代表該方法調用的是本地操作系統的方法*  *  *///因為person extends Object,所以可以使用其中的hashCode方法person p1=new person();int h1=p1.hashCode();//對象的哈希值System.out.println(h1);//31168322System.out.println(p1);//asdfg.person@1db9742就是上面邏輯地址當中的十六進制的表示//在創建另外的一個對象person p2=new person();int h2=p2.hashCode();//對象的哈希值System.out.println(h2);//17225372System.out.println(p2);//asdfg.person@106d69c就是上面邏輯地址當中的十六進制的表示//String 的哈希值String s1=new String("abc");String s2=new String("abc");System.out.println(s1.hashCode());//96354System.out.println(s2.hashCode());//96354//字符串重寫之后的哈希值是相同的//哈希值的改變是可以通過方法的程序進行的,如果哈希值不被重寫,就是由系統隨機給出的,/*** 什么是哈希表?* 在JDK1.8之前,哈希表底層采用數組+鏈表結構,及使用鏈表處理沖突,這里的沖突是指當一個哈希值對應多個數據的時候,不行,* 但是它位于一個桶中的元素較多及hash值相等的元素較多時,通過key查找效率較低,而JDK1.8中,哈希值存儲結構采用數據+鏈表+紅黑樹實現,* 超過8(閥值)將鏈表轉換為紅黑樹,這樣大大減少了查找時間,簡單來說,鏈表是由數組+鏈表+紅黑樹實現的,* * 哈希表的結構特點:* 查詢速度快* * 哈希表結構當中數組的個數一開始是16個塊,從0開始,初始容量是16個* * 數組結構:將相同哈希值的元素分為一組* 鏈表/紅黑樹:將哈希值相同的元素放到一起或者說是連接到一起* */
}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

劍指offer:45-48記錄

輸入一個正整數數組&#xff0c;把數組里所有數字拼接起來排成一個數&#xff0c;打印能拼接出的所有數字中最小的一個。 示例 1: 輸入: [10,2] 輸出: "102" 示例 2: 輸入: [3,30,34,5,9] 輸出: "3033459" 提示: 0 < nums.length < 100 說明:…

炸窩(可變函數)

可變函數源碼理解&#xff1a;學生角度&#xff0c;更易操作 public static void main(String[] args) {/*int cadd(10,29);System.out.println(c);*///此時可以隨意的進行數據的傳遞add(20,30,40);//[I1db9742:解釋&#xff0c;中括號代表是一個數組&#xff0c;為一個地址值…

劍指offer:50-53記錄

在字符串 s 中找出第一個只出現一次的字符。如果沒有&#xff0c;返回一個單空格。 示例: s "abaccdeff" 返回 "b" s "" 返回 " " 限制&#xff1a; 0 < s 的長度 < 50000 思路&#xff1a;map記錄次數&#xff0c;再…

Eclipse安裝插件的幾種方式

前段時間Google轉向了IDEA&#xff0c;貌似有些動搖了Eclipse作為Java領域IDE龍頭老大的位置&#xff0c;為此引起了Eclipse粉絲和IDEA粉絲的集體罵戰。類似這種罵戰向來都不絕于耳&#xff0c;貌似程序員的都比較多&#xff0c;可能大家都是搞技術出身&#xff0c;都很自信。其…

炸窩(Collections當中的addAll方法)

public class aaa { public static void main(String[] args) {/** java.util.Collections是集合工具類&#xff0c;用來對集合進行操作&#xff0c;* * 集合Collections當中的兩個方法&#xff1a;* 1.addAll方法&#xff1a;因為是靜態方法&#xff0c;嗯所以可以.直接吹風機…

劍指offer:55-58記錄

輸入一棵二叉樹的根節點&#xff0c;求該樹的深度。從根節點到葉節點依次經過的節點&#xff08;含根、葉節點&#xff09;形成樹的一條路徑&#xff0c;最長路徑的長度為樹的深度。 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7]&#xff0c; 3 / \ 9 20 …

Map集合知識點(炸窩)

/** * 簡單的介紹一下我們接下來準備學習的集合MAP集合 * * Map集合的簡單概述&#xff1a; * 其中的健是不能進行重復的&#xff0c;而且每一健只能映射一個值&#xff0c;簡單的說就是K與V是一一對應的&#xff0c;不能有其他的關系&#xff0c; * 但是我們注意到value值是可…

劍指offer:63-66記錄

假設把某股票的價格按照時間先后順序存儲在數組中&#xff0c;請問買賣該股票一次可能獲得的最大利潤是多少&#xff1f; 示例 1: 輸入: [7,1,5,3,6,4] 輸出: 5 解釋: 在第 2 天&#xff08;股票價格 1&#xff09;的時候買入&#xff0c;在第 5 天&#xff08;股票價格 6&a…

【大總結3】leetcode解題總覽(算法、劍指offer、SQL、多線程、shell)

3/22更新 劍指offer 題目鏈接 建議大部分題都會做&#xff0c;都能比較快速且準確的寫出來。關于做題方式&#xff0c;我的建議是&#xff1a;一道一道刷即可&#xff0c;因為難度一般&#xff0c;不用系統的學習什么知識&#xff0c;遇到實在不會的就跳過即可。 我這里寫了…

逆序存儲【數據結構】

C語言中malloc是動態內存分配函數。 函數原型&#xff1a;void malloc(unsigned int num_bytes); 參數&#xff1a;num_bytes 是無符號整型&#xff0c;用于表示分配的字節數。 返回值&#xff1a;如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定)&#xff0…

為什么 main 方法是 public static void ?

main 方法是我們學習Java編程語言時知道的第一個方法&#xff0c;你是否曾經想過為什么 main 方法是 public、static、void 的。當然&#xff0c;很多人首先學的是C和C&#xff0c;但是在Java中main方法與前者有些細微的不同&#xff0c;它不會返回任何值&#xff0c;為什么 ma…

返回地址【數據結構】

小問題&#xff1f; 1.我們是如何根據地址值來找到我們對應的數據的&#xff1f; 詳細陳述一下&#xff1a;當我們開辟一個整數類型&#xff0c;取名為a&#xff0c;假設地址空間是從數值為2000進行存儲&#xff0c;并且我們假設整形占用4個字節&#xff0c;那么我們在內存中需…

【超級詳細的小白教程】Hexo 搭建自己的博客

– 前言 這是一篇有關如何使用 Github Pages 和 Hexo 搭建屬于自己獨立博客的詳盡教程&#xff0c;本人是軟件工程專業本科生&#xff0c;目前只學習了C和C編程語言&#xff0c;對網站開發的有關知識幾乎為零&#xff0c;這也是我搭建好自己的博客之后寫的第一篇博客&#xff…

面向對象思想精華總結

一、三大特性 封裝繼承多態 二、類圖 泛化關系 (Generalization)實現關系 (Realization)聚合關系 (Aggregation)組合關系 (Composition)關聯關系 (Association)依賴關系 (Dependency) 三、設計原則 S.O.L.I.D其他常見原則 參考資料 一、三大特性 封裝 利用抽象數據類型將數據…

數組名與指向數組的指針之間的聯系與區別【數據結構】

我們遇到一個非常棘手的問題&#xff0c;這個問題就是&#xff0c;對于一堆數據來說&#xff0c;我們進行存儲&#xff0c;放到一個指定的倉庫當中&#xff0c;先前我們使用數組加加標的形式進行訪問倉庫當中的元素位置&#xff0c;但是呢&#xff0c;現在我們使用的是一個指針…

Struts2的action中處理JSONP方式提交的中文亂碼問題:

昨天在做公司網站的時候出現了一個中文亂碼問題&#xff0c;讓我郁悶了一晚上和一上午&#xff0c;最后在網友的提示下&#xff0c;我終于解決了&#xff0c;現在寫出來供后來的兄弟們參考&#xff1a; 1.問題是這樣的&#xff0c;就是客戶端是以JSONP的方式提交的數據&#x…

leetcode509. 斐波那契數(矩陣快速冪)

斐波那契數&#xff0c;通常用 F(n) 表示&#xff0c;形成的序列稱為斐波那契數列。該數列由 0 和 1 開始&#xff0c;后面的每一項數字都是前面兩項數字的和。也就是&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 給定 N&#xff0c;計算 F(N)。…

insert函數的修改,

我們來看一下圖片當中的第2個圓圈&#xff0c;為什么使用size來相加呢&#xff1f;我們知道一開始我們定義的初始空間為init_size;我們想一下啊&#xff0c;如果是第1次進行空間的增加&#xff0c;那么我們使用InIt來進行相加是可以的&#xff0c;但是當第2次想加我們再想開辟空…

leetcode520. py解字符串真是太殘暴了

給定一個單詞&#xff0c;你需要判斷單詞的大寫使用是否正確。 我們定義&#xff0c;在以下情況時&#xff0c;單詞的大寫用法是正確的&#xff1a; 全部字母都是大寫&#xff0c;比如"USA"。 單詞中所有字母都不是大寫&#xff0c;比如"leetcode"。 如果…

【數據結構】線性表大咖

循環鏈表的介紹 概念&#xff1a;鏈表的最后一個節點的指針&#xff0c;由原來的 空指針變成指向第1個節點的鏈表。 類比&#xff1a;我們進行串珠子的操作&#xff0c;將首尾通過線進行連接&#xff0c;同樣我們的鏈表就是通過指針指向的方式進行連接&#xff0c;使其成為一…