JAVASE入门十脚-红黑树,比较器,泛型

news2025/1/27 23:49:36

红黑树Set,ArrayList数组,LinkedList链表

AVL二叉树

 红黑树

插入节点一般是红色

treeSet()底层是treeMap,利用红黑树来实现

package ContainerDemo1;

import java.util.Objects;

public class PersonDemo {
    private  String name;
    private int age;

    public PersonDemo(){

    }
    public PersonDemo(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "PersonDemo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

package ContainerDemo1;

import java.util.HashSet;

public class TestDemoo {
    public static void main(String[] args) {
        HashSet hashSet=new HashSet();
        PersonDemo personDemo=new PersonDemo(15,"张三");
        PersonDemo personDemo1=new PersonDemo(16,"li三");
        PersonDemo personDemo2=new PersonDemo(15,"张三");
        hashSet.add(personDemo);
        hashSet.add(personDemo1);
        hashSet.add(personDemo2);
        System.out.println(hashSet);
    }
}

 1、set中存放的是无序,唯一的数据
2.set不可以通过下标获取对应位置的元素的值,因为无序的特点
3、使用treeset底层的实现是treemap,利用红黑树来进行实现
4、设置元素的时候,如果是自定义对象,会直找对象中的equals和hashcode的方法,如果没有,比较的
5、树中的元素是要默认进行排序操作的,如果是基本数据类型,下动比较,如果是引用类型的话,需要
比较器分类:

内部比较器
定义在元素的类中,通过实现comparable接口来进行实现
外部比较器
定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中

注意:外部比较器可以定义建一个工具类。此时所有而要比较的规则如果致的话,可以复用,
内部比较器只有在存储当前对象的时候才可以使用

当两者同时用的时候使用外部比较器

TreeSet定义内部比较器;

package ContainerDemo1;

import java.util.Objects;

public class PersonDemo implements Comparable{
    private  String name;
    private int age;

    public PersonDemo(){

    }
    public PersonDemo(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "PersonDemo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*
    此比较器按照name的长度来比较
     */
    @Override
    public int compareTo(Object o) {
        PersonDemo personDemo=(PersonDemo)o;
        if(personDemo.name.length()>this.name.length()){
            return 1;
        }
        else if(personDemo.name.length()<this.name.length()){
            return -1;
        }
        else {
        return 0;}

    }



}


package ContainerDemo1;

import java.util.HashSet;
import java.util.TreeSet;

public class TestDemoo {
    public static void main(String[] args) {
        TreeSet treeSet=new TreeSet();
        PersonDemo personDemo=new PersonDemo(15,"张三");
        PersonDemo personDemo1=new PersonDemo(16,"li三");
        PersonDemo personDemo2=new PersonDemo(15,"张三");
        treeSet.add(personDemo);
        treeSet.add(personDemo1);
        treeSet.add(personDemo2);
        System.out.println(treeSet);
    }


}

外部比较器:

package ContainerDemo1;

import java.util.Comparator;
import java.util.HashSet;
import java.util.TreeSet;

public class TestDemoo implements Comparator<PersonDemo> {
    public static void main(String[] args) {
        TreeSet treeSet=new TreeSet(new TestDemoo());
        PersonDemo personDemo=new PersonDemo(15,"张三");
        PersonDemo personDemo1=new PersonDemo(16,"li三");
        PersonDemo personDemo2=new PersonDemo(15,"张三");
        treeSet.add(personDemo);
        treeSet.add(personDemo1);
        treeSet.add(personDemo2);
        System.out.println(treeSet);
    }


    @Override
    public int compare(PersonDemo o1, PersonDemo o2) {
        if(o1.getAge()>o2.getAge()){
            return -1;

        }else if(o1.getAge()<o2.getAge()){
            return 1;
        }else {
        return 0;
    }}
}


package ContainerDemo1;

import java.util.Objects;

public class PersonDemo /*implements Comparable*/{
    private  String name;
    private int age;

    public PersonDemo(){

    }
    public PersonDemo(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "PersonDemo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*
    此比较器按照name的长度来比较
     */
//    @Override
//    public int compareTo(Object o) {
//        PersonDemo personDemo=(PersonDemo)o;
//        if(personDemo.name.length()>this.name.length()){
//            return 1;
//        }
//        else if(personDemo.name.length()<this.name.length()){
//            return -1;
//        }
//        else {
//        return 0;}
//
//    }


}

泛型

package ContainerDemo1;

import java.util.ArrayList;
import java.util.List;

public class ModernDemo {

    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("415");
        list.add("撒");
        list.add("555");
        list.add(new Dog("455","123").toString());
        System.out.println(list);
        for(String ite:list){
            System.out.println(ite);
        }
    }
}

当做一些集合的统一操作的时候,需要保证集合的类型是统的,此时需要泛型来进行限制
优点:
1、数据安全
2、获取数据时效率比较高
给集合中的元素没置相同的类型就是泛型的基本需求
使用:
在定义对象的时候,通过 中没置合理的类型来进行实现

泛型类

package ContainerDemo1;

public class FanXingClass<A> {
private int id;
private A a;

    public int getId() {
        return id;
    }

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

    public A getA() {
        return a;
    }

    public void setA(A a) {
        this.a = a;
    }
    public void show(){
        System.out.println(id+","+a);
    }
}


package ContainerDemo1;

public class FanXingDemo {
    public static void main(String[] args) {
        FanXingClass<String> fanXing=new FanXingClass<String>();
        fanXing.setA("机");
        fanXing.setId(55);
        fanXing.show();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2283400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

总结8..

#include <stdio.h> // 定义结构体表示二叉树节点&#xff0c;包含左右子节点编号 struct node { int l; int r; } tree[100000]; // 全局变量记录二叉树最大深度&#xff0c;初始为0 int ans 0; // 深度优先搜索函数 // pos: 当前节点在数组中的位置&#xff0c…

RabbitMQ 仲裁队列 -- 解决 RabbitMQ 集群数据不同步的问题

1.问题情景 当我们搭建了一个 RabbitMQ 集群后是存在问题的,也就是数据不同步.我们可以来看下是什么问题 1. 1 添加队列 ①:选择虚拟机(需要保证操作⽤户对当前虚拟机有操作权限) ②:设置队列名称 ③:持久化队列 ④:指定队列所在主节点,其他为从节点分别以 rabbit 节点和 rabb…

环境变量配置与问题解决

目录 方法 配置了还是运行不了想要的东西 解决方案 为什么 解决方案 方法 方法一&#xff1a;此电脑右击-属性-相关链接-高级系统设置-环境变量&#xff08;N&#xff09;-系统变量里面找到Path-三个确定】 方法二&#xff1a;winr cmd 黑框输入sysdm.cpl&#xff0c;后面…

js 数据组合,一级结构组合成父子嵌套数组结构

1.方法 buildDeptTree(deptData) { //构建树状部门// 创建一个 map 来存储 deptId 和对应的部门对象const deptMap new Map();// 初始化每个部门对象的 children 属性为空数组deptData.forEach(dept > {dept.children [];deptMap.set(dept.deptId, dept);});// 构建树形结…

Python GUI 开发 | PySide6 PyQt6 学习手册

本文是个 Python GUI 开发的目录&#xff0c;方便读者系统性学习的&#xff0c;笔者后续会满满填充此目录中的内容&#xff0c;感兴趣的小伙伴可以关注一手。&#xff08;主要是偏向 PySide6 方向的&#xff09; 0x01&#xff1a;PySide6 & PyQt6 基础入门 0x0101&#xff…

扣子平台音频功能:让声音也能“智能”起来

在数字化时代&#xff0c;音频内容的重要性不言而喻。无论是在线课程、有声读物&#xff0c;还是各种多媒体应用&#xff0c;音频都是传递信息、增强体验的关键元素。扣子平台的音频功能&#xff0c;为开发者和内容创作者提供了一个强大而灵活的工具&#xff0c;让音频的使用和…

mongoDB常见指令

即使我们自己开发用不到mongoDB&#xff0c;但是接手别人项目的时候&#xff0c;别人如果用了&#xff0c;我们也要会简单调试一下 虽然mongoDB用的不是sql语句&#xff0c;但语句的逻辑都是相似的&#xff0c;比如查看数据库、数据表&#xff0c;增删改查这些 我们下面以doc…

实验二 数据库的附加/分离、导入/导出与备份/还原

实验二 数据库的附加/分离、导入/导出与备份/还原 一、实验目的 1、理解备份的基本概念&#xff0c;掌握各种备份数据库的方法。 2、掌握如何从备份中还原数据库。 3、掌握数据库中各种数据的导入/导出。 4、掌握数据库的附加与分离&#xff0c;理解数据库的附加与分离的作用。…

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍&#xff08;软件&#xff09;3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐&#xff08;硬件&#xff09;4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…

php代码审计2 piwigo CMS in_array()函数漏洞

php代码审计2 piwigo CMS in_array()函数漏洞 一、目的 本次学习目的是了解in_array()函数和对项目piwigo中关于in_array()函数存在漏洞的一个审计并利用漏洞获得管理员帐号。 二、in_array函数学习 in_array() 函数搜索数组中是否存在指定的值。 in_array($search,$array…

PHP校园助手系统小程序

&#x1f511; 校园助手系统 —— 智慧校园生活 &#x1f4f1;一款基于ThinkPHPUniapp框架深度定制的校园助手系统&#xff0c;犹如一把智慧之钥&#xff0c;专为校园团队精心打造&#xff0c;解锁智慧校园生活的无限精彩。它独家适配微信小程序&#xff0c;无需繁琐的下载与安…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.2 ndarray解剖课:多维数组的底层实现

1.2 《ndarray解剖课&#xff1a;多维数组的底层实现》 内容介绍 NumPy 的 ndarray 是其核心数据结构&#xff0c;用于高效处理多维数组。在这篇文章中&#xff0c;我们将深入解析 ndarray 的底层实现&#xff0c;探讨其内存结构、维度、数据类型、步长等关键概念&#xff0c…

计算机网络 (61)移动IP

前言 移动IP&#xff08;Mobile IP&#xff09;是由Internet工程任务小组&#xff08;Internet Engineering Task Force&#xff0c;IETF&#xff09;提出的一个协议&#xff0c;旨在解决移动设备在不同网络间切换时的通信问题&#xff0c;确保移动设备可以在离开原有网络或子网…

css粘性定位超出指定宽度失效问题

展示效果 解决办法&#xff1a;外层容器添加display:grid即可 完整代码 <template><div class"box"><div class"line" v-for"items in 10"><div class"item" v-for"item in 8">drgg</div>&…

10 Hyperledger Fabric 介绍

简介 HypeLedger&#xff08;超级账本&#xff09;是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。 HypeLedger Fabric是HypeLedger种的区块链项目之一HypeLedger Fabric引入权限管理在架构设计上支持可插拔、可扩展是首个面向联盟链场景的开源项目 …

分布式光纤应变监测是一种高精度、分布式的监测技术

一、土木工程领域 桥梁结构健康监测 主跨应变监测&#xff1a;在大跨度桥梁的主跨部分&#xff0c;如悬索桥的主缆、斜拉桥的斜拉索和主梁&#xff0c;分布式光纤应变传感器可以沿着这些关键结构部件进行铺设。通过实时监测应变情况&#xff0c;能够精确捕捉到车辆荷载、风荷…

机器学习10-解读CNN代码Pytorch版

机器学习10-解读CNN代码Pytorch版 我个人是Java程序员&#xff0c;关于Python代码的使用过程中的相关代码事项&#xff0c;在此进行记录 文章目录 机器学习10-解读CNN代码Pytorch版1-核心逻辑脉络2-参考网址3-解读CNN代码Pytorch版本1-MNIST数据集读取2-CNN网络的定义1-无注释版…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;。由于一个共享内存段会称…

稀土抗菌剂:提升产品质量,保障公共健康

随着全球对抗菌技术需求的不断增长&#xff0c;传统的抗菌剂逐渐暴露出其局限性&#xff0c;包括耐药性、环境污染及副作用等问题。在此背景下&#xff0c;稀土抗菌剂作为一种新兴的抗菌材料&#xff0c;凭借其卓越的抗菌性能、环保特性以及应用多样性&#xff0c;正在成为各行…

机器学习11-学习路径推荐

机器学习11-学习路径推荐 本文希望摒除AI学习商业宣传要素&#xff0c;推荐一条极简的AI学习路线&#xff01;推荐内容均为在线免费内容&#xff0c;如果有条件可以咨询专业的培训机构&#xff01; 文章目录 机器学习11-学习路径推荐[toc] 1-AI培训路线第一阶段 Python-人工智能…