Java进阶:【集合】set接口

简介: Java进阶:【集合】set接口

set接口

特点:无序,唯一,这里的无序是相对list来说的,不是随机,


API:相对于list,没有索引的相关方法,


那么证明我们的遍历方法有:


(1)迭代器


(2)增强for循环


hashset实现类使用

无序,唯一,我们会发现重复存放的元素,输出的时候只会有一个,那如何验证呢,add()是一个bool返回值方法,所以我们输出add方法来看看去呗


我们可以发现,第一次添加hello,的返回结果时true成功的,第二次重复的时候就是false失败的,

    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();
        System.out.println(hs.add("hello")); //true
        hs.add("hello");
        hs.add("hi");
        hs.add("html");
        hs.add("apple");
        hs.add("hello");
        System.out.println(hs.add("hello"));//false
        System.out.println(hs);
        System.out.println(hs.size());
    }

自定义引用类型的数据:

    public static void main(String[] args) {
        HashSet<Student> hs = new HashSet<>();
        hs.add(new Student("小丽",19));
        hs.add(new Student("小hu",29));
        hs.add(new Student("小Li",39));
        hs.add(new Student("小tian",49));
        hs.add(new Student("小丽",19));
        System.out.println(hs.toString());
    }

我自定义的类型不满足,唯一,无序的特点,为什么呢?


HashSet简要原理图

1.png


原因:我们的Student类没有重写hashCode和equals方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                name.equals(student.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

重写之后,就符合HashSet的无序,唯一的特性了


hashSet原理:

底层与hashmap十分相似,下图是属性和构造器的分析

1.png


collection总结图

2.png

相关文章
|
17小时前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
6 1
|
13小时前
|
Java
黑马Java 集合(下)
黑马Java 集合(下)
5 0
|
13小时前
|
Java
黑马Java 集合(上)
黑马Java 集合(上)
3 0
|
15小时前
|
Arthas 监控 Java
Java项目方法调用链路耗时追踪(接口优化)
Java项目方法调用链路耗时追踪(接口优化)
5 0
|
15小时前
|
Java 机器人 关系型数据库
Java中的类与接口:抽象与实现的艺术
Java中的类与接口:抽象与实现的艺术
|
1天前
|
Java
JAVA构建List集合为树形结构的方法和代码
JAVA构建List集合为树形结构的方法和代码
|
1天前
|
Java
java中将集合数组转换为Stream流
java中将集合数组转换为Stream流
6 0
|
1天前
|
Java
java使用Predicate接口中的test对数据进行判断
java使用Predicate接口中的test对数据进行判断
5 0
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
1月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解