Set集合

1 Set集合介绍

Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是不重复的元素。
通过元素的equals方法,来判断是否为重复元素。
Set集合取出元素的方式可以采用:迭代器,增强 for

2 HashSet(哈希表)

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

  • 特点:无序集合,存储和取出的顺序不同,没有索引,不存储重复元素。代码的编写和ArrayList完全一致。
    HashSet特点:
  • 底层数据结构:哈希表(链表和数组的结合体);
  • 存储取出都比较快;
  • 线程不安全,运行速度快;

3 对象的哈希值

  • 如果没有重写父类,每次运行的结果都是不同的整数;
  • 如果子类重写父类的方法,哈希值,自定义;
  • 存储到HashSet的依据;

4 字符串的哈希值

String类继承Object,重写了父类的方法hashCode,

5 哈希表的存储过程

public static void main(String[] args) {
        HashSet<String> set=new HashSet<String>();
        set.add(new String("abc"));
        set.add(new String("abc"));
        set.add(new String("abc"));
        set.add(new String("bbc"));
        set.add(new String("bbc"));
        System.out.println(set);

    }

这里写图片描述
- new String("abc"),调用对象的哈希值 new String("abc").hashCode=96354,集合在容器内找,有没有和96354一样的哈希值;
- new String("abc"),集合在容器内找到了已经有一个对象也是96534,集合会让后来的对象调用方法equals(已经有的对象)。两个对象哈希值一样,equals方法返回是true,集合判定元素已经重复;

6 LinkedHashSet集合

  • 基于链表的哈希表实现;
  • 继承自HashSet;
  • -
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页