HashSet集合、哈希值

HashSet集合

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

HashSet集合继承了C ollection接口

  set接口的特点:

    不允许重复元素,

    没有索引,没有带索引的方法,也不能使用普通的for循环

  HashSet集合的特点:

    不允许有重复的元素  

    没有索引,没有带索引的方法,也不能使用普通的for循环

    是一个无序集合,存储元素和取出元素可能不一致

    底层是一个hash表结构(查询快)

案例:

  

    public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
// 迭代器遍历集合
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){
Integer next = iterator.next();
System.out.println(next);
}
// 使用增强for循环
for (Integer integer : set) {
System.out.println(integer);
}
}
}

哈希值

  哈希值:是一个十进制的整数,有系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际储存地址)

在Object类中有一个方法,可以来获取对象的哈希值

int hashCode()返回对象的哈希码值

hashCode()方法的源码:

    public native int hashCode();

    native:代表方法调用是本地操作系统的方法

 案例:

  

public class HaSh {
public static void main(String[] args) {
HashSet1 hashSet1 = new HashSet1();
int i = hashSet1.hashCode();
// 打印地址值
System.out.println(i);
// 我们前面学到的 toString 其实也是HashCode的方法 我来看看源码
// public int hashCode() {
// return Integer.hashCode(value);
// }



}
}

 
如果我们重写hashCode方法 

public class HashSet1 {
@Override
public int hashCode() {
return 111;
}

然后在来看返回值

  

 

 


 

posted @ 2022-07-06 13:30  一位程序袁  阅读(44)  评论(0编辑  收藏  举报