• Java基础知识强化之集合框架笔记39:Set集合之HashSet存储字符串并遍历


    1. HashSet类的概述:

    (1)不保证set的迭代顺序

    (2)特别是它不保证该顺序恒久不变

    HashSet底层数据结构是哈希表哈希表依赖于哈希值存储,通过哈希值来确定元素的位置,  而保证元素唯一性是通过hashCode方法equals方法完成的。
     当哈希值不相同的时候,不需要判断equals方法,只要当哈希值相同才会判断equals方法。

    2. HashSet如何保证元素唯一性

    保证元素唯一性,底层依赖于两个方法:

           int hashCode()

          • boolean equals(Object obj)

    3. HashSet存储字符串并遍历:

    (1)代码示例如下:

     1 package cn.itcast_02;
     2 
     3 import java.util.HashSet;
     4 
     5 /*
     6  * HashSet:存储字符串并遍历
     7  */
     8 public class HashSetDemo {
     9     public static void main(String[] args) {
    10         // 创建集合对象
    11         HashSet<String> hs = new HashSet<String>();
    12 
    13         // 创建并添加元素
    14         hs.add("hello");
    15         hs.add("world");
    16         hs.add("java");
    17         hs.add("world");
    18 
    19         // 遍历集合
    20         for (String s : hs) {
    21             System.out.println(s);
    22         }
    23     }
    24 }

    运行效果如下:

    (2)问题:为什么存储字符串的时候,字符串内容相同的只存储了一个呢?

     通过查看add方法的源码,我们知道这个方法底层依赖于两个方法:hashCode()和equals().

     步骤:

      首先比较哈希值

      如果相同,就继续走,比较地址值或者走equals()

      如果不同,就直接添加到集合中

    按照方法的步骤来说

      先看hashCode()值是否相同

        相同:继续走equals()方法

            返回true:说明元素重复,就不添加

              返回false:说明元素不重复,就添加到集合

                不同:就直接把元素添加到集合

     如果类没有重写这两个方法,就默认使用Object(),一般来说不会相同

     而String类重写了hashCode()和equals()方法,所以,它就可以把内容相同的字符串去掉,只留下一个。

  • 相关阅读:
    git的简单操作
    angularjs的基础
    针对IE8透明度设置及一些简单的兼容问题
    sublime 部分常用的快捷键
    Linux简单的操作
    AngularJS 简单的介绍
    html5的viewport与css3的媒体查询
    css的优先级的相关内容
    (转) vmware 切换桥接模式
    从nginx的编译安装,了解编译安装原理(转)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4856328.html
Copyright © 2020-2023  润新知