java集合框架复习----(3)Set

简介: 这篇文章详细介绍了Java集合框架中的Set集合,包括HashSet和TreeSet的特点、实现原理和使用示例,展示了Set集合的无序性、元素唯一性以及如何通过自定义比较器实现元素的排序。

文章目录

  • 四、set集合
    • 1、hashSet【重点】
    • 2、TreeSet

四、set集合

无序、无下标、元素不可重复

1、hashSet【重点】

\== 数组+链表+红黑树==

  • 基于hashcode计算元素存储位置
  • 当哈希吗一样的时候,调用equals,如果为true,拒接存入
package com.zheng.demo3;

import java.util.HashSet;
import java.util.Iterator;

public class MySet {
    public static void main(String[] args) {

        //创建集合框架
        HashSet<String> set = new HashSet<>();

        //添加数据
        set.add("1-小红");
        set.add("2-小明");
        set.add("3-小白");
        set.add("4-小黑");
        set.add("5-小红");
        set.add("1-小红");

        //迭代器迭代集合元素 遍历
        Iterator<String> iterator = set.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }
}

在这里插入图片描述

实体类

package com.zheng.demo3;

public class School {
    private int id;
    private String name;

    public School() {

    }

    public School(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "School{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
package com.zheng.demo3;

import java.util.HashSet;
import java.util.Iterator;

public class TestSet {
    public static void main(String[] args) {

        //1、创建集合容器
        HashSet<School> schools = new HashSet<>();

        //创建对象
        School school1 = new School(1, "清华大学");
        School school2 = new School(2, "北京大学");
        School school3 = new School(3, "浙江大学");

        //3、放入集合

        schools.add(school1);
        schools.add(school2);
        schools.add(school3);
        schools.add(new School(2,"北京大学"));

        //4、遍历

        Iterator<School> iterator = schools.iterator();
        while (iterator.hasNext()){
            School school=iterator.next();
            System.out.println(school);
        }


    }
}

在这里插入图片描述

2、TreeSet

存储结构:红黑树

  • 要实现comparable接口,重写里边的方法,返回0代表元素重复
  • 元素不重复
  • 元素自动排序
package com.zheng.demo3;

import java.util.Iterator;
import java.util.TreeSet;

public class MyTree {
    public static void main(String[] args) {

        //1、创建一个集合
        TreeSet treeSet = new TreeSet();

        //2、加入元素
        treeSet.add(1);
        treeSet.add(3);
        treeSet.add(2);
        treeSet.add(4);
        treeSet.add(3);


        //3、迭代遍历
        Iterator iterator = treeSet.iterator();
        while (iterator.hasNext()) {
            int i = (int) iterator.next();
            System.out.println(i);
        }


    }
}

在这里插入图片描述
TreeSet案例:排列字符串的顺序

package com.zheng.demo3;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class MyTreeSet {
    public static void main(String[] args) {
        //匿名内部类
        TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int n1 = o1.length() - o2.length();
                int n2 = o1.compareTo(o2);
                return n1 == 0 ? n2 : n1;
            }

        });


        set.add("he");
        set.add("hhhhh");
        set.add("jdjdjkdkk");
        set.add("djdj");


        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

在这里插入图片描述
comparator:定制比较器

相关文章
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
199 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
217 101
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1086 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
16天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
17天前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
25天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
86 8
|
25天前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
54 7
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
下一篇
开通oss服务