Java学习路线-36:Set集合

简介: Java学习路线-36:Set集合

第30 章 : Set集合

130 Set接口简介

Set集合不允许保存重复数据

继承关系


-@Iterable
    -@Collection
        -@Set
            -@SortedSet
                -@NavigableSet
AbstractCollection(Collection)
    -AbstractSet(Set)
        -HashSet(Set, Cloneable, java.io.Serializable) 
        -TreeSet(NavigableSet, Cloneable, java.io.Serializable)

131 HashSet子类

HashSet元素无序


import java.util.HashSet;
import java.util.Set;
class Demo{
    public static void main(String[] args) {
        Set<String> list = new HashSet<String>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, World]
        list.forEach(System.out::println);
        /**
         Hello
         World
         */
    }
}

132 TreeSet子类

TreeSet数据有序,按照升序排序


import java.util.Set;
import java.util.TreeSet;
class Demo{
    public static void main(String[] args) {
        Set<String> list = new TreeSet<String>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, World]
        list.forEach(System.out::println);
        /**
         Hello
         World
         */
    }
}

133 分析TreeSet子类排序操作

TreeSet 通过TreeMap实现

需要实现Comparable接口

自定义类需要将所有属性进行比对,首选HashSet


import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person other) {
        if (this.age > other.age) {
            return 1;
        } else if (this.age < other.age) {
            return -1;
        } else {
            return this.name.compareTo(other.name);
        }
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Demo {
    public static void main(String[] args) {
        Set<Person> list = new TreeSet<Person>();
        list.add(new Person("Jack", 24));
        list.add(new Person("Tom", 23));
        list.add(new Person("Tom", 23));
        System.out.println(list);
        // [Person{name='Tom', age=23}, Person{name='Jack', age=24}]
        list.forEach(System.out::println);
        /**
         Person{name='Tom', age=23}
         Person{name='Jack', age=24}
         */
    }
}

134 分析重复元素消除

实现重复元素判断

TreeSet Comparable接口

HashSet 对象编码 hashCode方法 ; 对象比较 equals方法


import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    @Override
    public int compareTo(Person other) {
        if (this.age > other.age) {
            return 1;
        } else if (this.age < other.age) {
            return -1;
        } else {
            return this.name.compareTo(other.name);
        }
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Demo {
    public static void main(String[] args) {
        Set<Person> list = new HashSet<Person>();
        list.add(new Person("Jack", 24));
        list.add(new Person("Tom", 23));
        list.add(new Person("Tom", 23));
        System.out.println(list);
        // [Person{name='Tom', age=23}, Person{name='Jack', age=24}]
        list.forEach(System.out::println);
        /**
         Person{name='Tom', age=23}
         Person{name='Jack', age=24}
         */
    }
}

相关文章
|
4月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
155 7
|
5月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
705 3
|
5月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
1021 1
|
5月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
332 100
|
5月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
351 101
|
5月前
|
SQL 算法 Java
零基础到精通的史上最强 Java 学习路线图推荐
史上最全Java学习路线图,涵盖基础语法、面向对象、数据结构与算法、多线程、JVM、Spring框架、数据库及项目实战,助你从零基础到精通Java开发,附完整代码与工具推荐。
352 3
零基础到精通的史上最强 Java 学习路线图推荐
|
5月前
|
SQL 算法 Java
适合自学的史上最强 Java 学习路线图分享
本路线图系统讲解Java从入门到进阶的学习路径,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架如Spring、数据库操作及项目实战,助你全面掌握Java开发技能,适合零基础及进阶学习。
1108 0
|
5月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
1800 0
|
5月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
5月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
432 1