HashSet的使用

简介: HashSet的使用

Collection下的子类:

List

  有序(存储顺序和取出顺序一致),可重复

Set

  无序(存储顺序和取出顺序不一致),唯一

  HashSet:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。

  注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,

  而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,就能看到效果。

eg:

public class SetDemo {
  public static void main(String[] args) {
    // 创建集合对象
    Set<String> set = new HashSet<String>();

    // 创建并添加元素
    set.add("hello");
    set.add("java");
    set.add("world");
    set.add("java");
    set.add("world");

    // 增强for
    for (String s : set) {
      System.out.println(s);
    }
  }
}

eg 2 : HashSet:存储字符串并遍历

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

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

 步骤:

  1.首先比较哈希值

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

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

  4.按照方法的步骤来说:

  5.先看hashCode()值是否相同

   5.1.相同:继续走equals()方法

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

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

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

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

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

public class HashSetDemo {
  public static void main(String[] args) {
    // 创建集合对象
    HashSet<String> hs = new HashSet<String>();

    // 创建并添加元素
    hs.add("hello");
    hs.add("world");
    hs.add("java");
    hs.add("world");

    // 遍历集合
    for (String s : hs) {
      System.out.println(s);
    }
  }
}

目录
相关文章
|
4月前
|
存储
HashSet和LinkedHashSet使用
HashSet和LinkedHashSet使用
|
6月前
|
容器
HashSet
HashSet
45 0
|
存储 对象存储
HashSet、TreeSet、LinkedHashSet的区别
HashSet、TreeSet、LinkedHashSet的区别
93 0
|
存储 算法
TreeSet 和 HashSet 的区别
TreeSet 和 HashSet 的区别
58 0
|
存储 Java
使用Set集合及HashSet,TreeSet
使用Set集合及HashSet,TreeSet
64 0
|
存储 安全
HashSet和HashMap
HashSet和HashMap
119 0
|
存储 安全 容器
HashSet详解
HashSet详解
173 0
HashSet详解
|
存储 容器
LinkedHashSet详解
LinkedHashSet详解
186 0
LinkedHashSet详解
|
存储 安全 API
TreeSet详解
TreeSet详解
165 0
TreeSet详解