哈希值在哪里找,【零基礎學Java】—哈希值(四十一)

 2023-10-15 阅读 30 评论 0

摘要:【零基礎學Java】—哈希值(四十一) 一、 HashSet集合的介紹 java.util.Set接口 extends Collection接口 Set接口的特點: 不允許重復的元素沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷java.util.HashSet集合 implements Set接口

【零基礎學Java】—哈希值(四十一)

一、 HashSet集合的介紹

java.util.Set接口 extends Collection接口

Set接口的特點:

  • 不允許重復的元素
  • 沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷
  • java.util.HashSet集合 implements Set接口

HashSet特點:

  • 不允許重復的元素
  • 沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷
  • 是一個無序的集合,存儲元素和取出元素的順序有可能不一致
  • 底層是一個哈希表結構(查詢的速度非常的快)
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;/*** @author :CaiCai* @date : 2022/4/13 14:30*//*java.util.Set接口 extends Collection接口Set接口的特點:
不允許重復的元素
沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷
java.util.HashSet集合 implements Set接口HashSet特點:不允許重復的元素沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷是一個無序的集合,存儲元素和取出元素的順序有可能不一致底層是一個哈希表結構(查詢的速度非常的快)*/
public class demoSet {public static void main(String[] args) {Set<Integer> set =new HashSet<>();// 使用add方法往集合中添加元素set.add(1);set.add(2);set.add(3);set.add(1);//使用迭代器遍歷Set集合Iterator<Integer> it=set.iterator();while(it.hasNext()){Integer n=it.next();System.out.println(n);}System.out.println("================");//使用增強for循環遍歷Set結合for(Integer i: set){System.out.println(i);}}
}

在這里插入圖片描述

二、哈希值

哈希值:是一個十進制的整數,由系統隨機給出(就是對象的地址值,是一個邏輯地址,是模擬出來得到的地址,不是數據實際存儲的物理地址
Object類中有一個方法,可以獲取對象的哈希值

哈希值在哪里找,int hashCode() 返回該對象的哈希碼值

hashCode的源碼:代表該方法調用的是本地操作系統的方法

public native int hashCode(); native:代表該方法調用的是本地的操作對象

public class demo03 {public static void main(String[] args) {Person p1=new Person();int h1=p1.hashCode();System.out.println(h1);//23934342Person p2=new Person();int h2=p2.hashCode();System.out.println(h2);//22307196/*String類的哈希值String類重寫Object類的hashCode方法*/String s1=new String("abc");String s2=new String("abc");System.out.println(s1.hashCode());//96354System.out.println(s2.hashCode());//96354System.out.println("重地".hashCode());//1179395System.out.println("通話".hashCode());//1179395}
}

三、HashSet集合存儲數據的結構

哈希沖突:兩個元素不同,但是哈希值相同
在這里插入圖片描述

四、Set集合存儲元素不重復的原理

在這里插入圖片描述

五、HashSet存儲自定義類型的元素

public class Person1 {private String name;private int age;public Person1() {}public Person1(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person1{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person1 person1 = (Person1) o;return age == person1.age &&Objects.equals(name, person1.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
/*
HashSet存儲自定義類型的元素存儲元素(String,Integer,……,Student,Person……)必須重寫hashCode方法和equals方法要求:同名和同年齡的人視為同一個人,只能存儲一次*/
public class DemoHashPerson {public static void main(String[] args) {//創建HashSet集合存儲PersonHashSet<Person1> set=new HashSet<>();Person1 p1=new Person1("張三",20);Person1 p2=new Person1("張三",20);Person1 p3=new Person1("王五",21);System.out.println(p1.hashCode());//24022540System.out.println(p2.hashCode());//24022540System.out.println(p1==p2);//falseSystem.out.println(p1.equals(p2));//trueset.add(p1);set.add(p2);set.add(p3);System.out.println(set);}
}

六、LinkedHashSet集合

java.util.linkedHashSet集合extends HashSet集合
linkedHashSet 集合的特點:
底層是一個哈希表(數組+鏈表/紅黑樹)+鏈表:多了一條鏈表(記錄元素的存儲順序)保證元素有序

/*
java.util.linkedHashSet集合extends HashSet集合
linkedHashSet 集合的特點:
底層是一個哈希表(數組+鏈表/紅黑樹)+鏈表:多了一條鏈表(記錄元素的存儲順序)保證元素有序*/
public class demoLinkHashSet {public static void main(String[] args) {HashSet<String> set=new HashSet<>();set.add("www");set.add("abc");set.add("abc");set.add("itcns");System.out.println(set);//[itcns, abc, www]無序 不允許重復LinkedHashSet<String> linked=new LinkedHashSet<>();linked.add("www");linked.add("abc");linked.add("abc");linked.add("yyy");System.out.println(linked);//[www, abc, yyy] 有序 不允許重復}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/140542.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息