泛型、Set、二叉树

2025华东杯A/B/C题解题思路+可运行代码参考 这些因素包括但不限于:助滑坡的坡度、运动员的质量、滑雪板的接触面与雪地的摩擦力、空气阻力系数、运动员的体型和衣物形态等。助滑坡是运动员滑行至起跳台前的最后一段坡道,这一段坡道的坡度、长度和运动员的姿势会直接影响到起跳时的初始速度。运动员的滑行速度不仅受助滑坡的坡度影响,还受到摩擦力、空气阻力和重力等多方面因素的影响。通过合理的姿势调整,运动员能够有效减少空气阻力,增加身体的重力加速度,进而提升滑行速度。助滑坡的角度通常介于10°到12°之间,而运动员的滑行速度将受到重力、摩擦力和空气阻力的共同作用。 阅读详情

泛型:Java中如果在写代码的时候,不知道数据类是什么类型,那么就可以使用泛型。泛型其实就是任意的数据类型。

泛型可以使用在哪些地方?
    泛型类: 在类名后面<T>, 它表示在类中有一个不确定的数据类型。
    泛型方法: 在方法的返回值前面<T>,它表示在方法中有一个不确定的数据类型
    泛型接口:在接口名后面<T>,它表示在接口中有一个不确定的数据类型

泛型的好处:

1.把运行时期的问题转移到编译时期

2.避免了强制类型的转换

泛型类

         在类名后面<T>,它表示类中有一个不确定的数据类型

例:

//定义一个盒子,用来装东西(什么东西,不知道)
public class Box<T>{
    T t; //盒子里面装的是T类型的数据
    

    public void setT(T t){
        this.t=t;
    }
    
    public T getT(){
        return t;
    }
}

创建Box类的对象,创建对象的是同时确定泛型<T>的数据类型

public class Test1{
    public static void main(String[] args){
        //创建Box对象,同时确定泛型<T>为<String>类型
        Box<String> b=new Box<>(); 
        b.setT("黑马程序员");
        String s1=b.getT();
        System.out.println(s1); //黑马程序员
        
        //创建Box对象,同时确定泛型<T>为<Integer>类型
        Box<Integer> b=new Box<>();
        b.setT(100);
        Integer s2=b.getT();
        System.out.println(s2); //100
    }
}

泛型方法

在方法的返回值前面<T>,它表示在方法中有一个不确定的数据类型。当调用方法时确定泛型的数据类型 。

public static void main(String[] args){
    //确定addElement方法的<T>为<String>类型
    ArrayList<String> list1=new ArrayList<>();
    addElement(list1,"a","b","c");
    
    //确定addElement方法的<T>为<Integer>类型
    ArrayList<Integer> list2=new ArrayList<>();
    addElement(list2,1,2,3); 
}

//<T>表示一个在方法中不确定的数据类型
public static <T> void addElement(ArrayList<T> list, T t1, T t2, T t3){
    list.add(t1);
    list.add(t2);
    list.add(t3);
} 

泛型接口

在接口名后面<T>,它表示在接口中有一个不确定的数据类型

public interface Inter<T>{
    public void method(T t);
}

**接口上的泛型<T>可以在实现类中确定其数据类型



public class InterImpl implements Inter<String>{
    public void method(String t){
        System.out.println(t);
    }
}

**把接口上的泛型<T>沿用到实现类上,再创建对象的时候来确定其数据类型

public class InterImpl<T> implements Inter<T>{
    public void method(T t){
        System.out.println(t);
    }
}

public class Test3{
    public static void main(String[] args){
        InterImpl<String> impl=new InterImpl();
        impl.method("黑马程序员");
        
        InterImpl<Integer> impl=new InterImpl();
        impl.method(100);
    }
}

泛型的总结

1、类上的泛型<T>: 创建该类对象时,确定<T>的数据类型。

2.方法上的泛型<T>:调用方法的时候,确定<T>的数据类型。

3.接口上的泛型<T>:
    1)在实现类上确定<T>的数据类型
    2)把泛型<T>沿用到实现类上,在创建实现类对象来确定<T>的数据类型

泛型限定

?: 表示任意的类型
?  extends  Number: Number或者Number的子类
?  super  Number:  Number或者Number的父类

Set集合

Set集合的特点:没有索引,无序、元素不能重复
    --HashSet:元素是没有顺序
    --TreeSet:它可以对集合中的元素进行排序

TreeSet类有

TreeSet集合可以对元素进行排序。有两种排序方式。

自然排序:让元素的类实现Comparable接口,复写compareTo方法

public class Student implements Comparable<Student>{

  private String name;
    private int age;
    private int score;

    //省略构造方法,自己加上即可

    //实现Comparable接口重写方法来告诉TreeSet排序的规则
    @Override
    public int compareTo(Student o) {
        //先按照成绩排序,
        int num=this.score-o.score;
        //如果成绩相同,再按照年龄排序
        if(num==0){
            num=this.age-o.age;
        } 
        return num;
    }
}
  • 比较器排序Comparator,让集合具备比较规则。

//创建TreeSet集合,同时指定排序规则 需要一个Comparator对象。
TreeSet<Teacher> ts=new TreeSet<>(new Comparator<Teacher>() {
    @Override
    public int compare(Teacher o1, Teacher o2) {
        //o1和o2 表示集合中已有的两个元素
        //按照年龄升序排列
        int num=o1.getAge()- o2.getAge();
        //如果年龄相同,就按照姓名进行比较
        if(num==0){
            num=o1.getName().compareTo(o2.getName());
            if(num==0){
                //...
            }
        }
        return num; 
    }
}); 
​
ts.add(new Teacher("zhagnasn",20));
ts.add(new Teacher("lisi",21));
ts.add(new Teacher("wangwu",22));
ts.add(new Teacher("aaaa",22));
ts.add(new Teacher("zhaoliu",24));
ts.add(new Teacher("zhaoliu",24));
​
for (Teacher t : ts) {
    System.out.println(t);
}

两种排序规则的对比

第一种(自然排序):
    自定义的类实现Comparable接口,复写compreTo方法
    
第二种(比较器排序)
    在创建TreeSet集合时,把Comparator对象作为参数传递.
    复写Comparaotr接口的compare方法
    
如何选择呢?
    1.一般先推荐使用自然排序(Comparble接口)
    
    2.当自然排序不满足要求时,然后就可以使用比较器排序
        其实API中有一些类本身就已经实现了Comparble接口,给出了默认排序规则(不满足要求)
        比如:Integer,默认排序规则是(升序排列)
        比如:String,默认排序规则(字典顺序)

二叉树

二叉树: 每一个节点,它最多有两个子节点

二叉查找树(二叉排序树、二叉搜索树):对于任意的一个节点,左边的子节点都比这个数小,右子节点都比这个数大。

二叉平衡树:每一个节点,左右两个子树的高度差不超过1
    
如果一个二叉树不平衡,如何达到平衡?
    左旋:如果右子树比左子树的高度差大于1,就需要左旋
    右旋:如果左子树比右子树的高度差大于1,就需要右旋
    
破坏平衡二叉树的几种情况,如何再次达到平衡
    左左:在左子树的左边添加元素,直接右旋即可
    左右:在左子树的右边添加元素,先左旋再右旋
    
    右右:在右子树的右边添加元素,直接左旋即可
    右左:在右子树的左边添加元素,先右旋再左旋

【回答问题】ChatGPT上线了!如何安装python-ipopt?python-ipopt有哪些用法? python-ipopt是一种基于Python语言的求解非线性最优化问题的软件包。它使用了Interior Point Optimizer(IPOPT)算法来求解最优化问题。这段代码使用python-ipopt求解了一个无约束的非线性最小化问题,其目标函数为(x[0] - 1) ** 2 + (x[1] - 2) ** 2,求解结果为x_opt。求解线性规划问题、二次规划问题、二次范数最小化问题等类型的最优化问题。对于给定的最优化问题,可以设置不同的求解参数来控制求解的精度和效率。 阅读详情

相关推荐

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

【Matplotlib】绘图常见设置说明

说明:此贴会不定期进行更新! 设置1:图像的大小设置。 如果已经存在figure对象,可以通过以下代码设置尺寸大小: f.set_figheight(15) f.set_figwidth(15) 若果通过.sublots()命令来创建新的figure对象, 可以通过设置figsize参数达到目的。 f, axs = plt.subplots(2,2,figsize=(15,15)) 设置2:刻度...

weixin_33868027的博客 515

抖音批量取消关注神器:5行JS代码搞定,告别手动操作(附详细步骤)

本文介绍了一种利用JS脚本在抖音创作者平台批量取消关注的高效方法。通过浏览器开发者工具执行简单的JavaScript代码,即可自动化模拟点击操作,快速清理大量关注列表,告别繁琐的手动操作。文中提供了详细的步骤和核心代码,适合有一定技术基础的用户参考。

weixin_29009971的博客 596

Python之Matplotlib(1)

import numpy as np import pandas as pd import matplotlib.pyplot as plt In [5]: x = np.random.rand(10) y = np.random.rand(10) plt.scatter(x,y) #显示的方法 plt.show() x = np.random.rand(10) y = np.random.r...

weixin_38452632的博客 211

Frida实战:如何逆向分析某电商App的doCommandNative函数(附完整Hook脚本)

本文详细介绍了如何使用Frida逆向分析电商App中的doCommandNative函数,涵盖动态注册识别、SO加固对抗及高级Hook脚本编写等实战技巧。通过完整Hook脚本示例,帮助安全研究人员深入理解JNICLibrary的关键函数逆向分析方法,提升移动应用安全研究能力。

weixin_29327977的博客 615

ROS2进程内通信:零拷贝Intra-Process原理与实战

Intra-Process通信是ROS2实现低延迟节点间数据交换的核心机制,其本质是通过C++17智能指针与零拷贝共享内存,在同一进程内绕过序列化、系统调用和上下文切换。相比传统DDS跨进程通信,它将`geometry_msgs::Twist`类消息延迟从42μs降至0.8μs,显著提升机器人实时控制性能。该技术并非自动启用,需满足同执行器、QoS严格匹配、内存所有权明确三大约束,适用于机械臂控制、视觉SLAM、图像处理流水线等对端到端延迟敏感的场景。本文聚焦ROS2原生Intra-Process通讯的原理

weixin_30619101的博客 362

[python] plt绘图前准备

import matplotlib.pyplot as plt # ======================== plot def set_figure(font_size=10., tick_size=8., ms=7., lw=1.2, fig_w=8.): # print(plt.rcParams.keys()) # 很有用,查看所需属性 # exit() cm_to_inc = 1 / 2.54 # 厘米和英寸的转换 1inc = 2.54cm w = fig

weixin_43543177的博客 351

安装了anaconda,pycharm导入numpy时提示没有该包(模块)?

**问题详情:**我安装了anaconda,在利用Pycharm学习numpy这个库的时候,导入numpy这个包的时候提示我没有nummpy这个模块:No module named numpy.如下图所示。 应该说安装了Anaconda,里边就自带了numpy这个库,就应该能够使用。我一个新手怎么搞得懂呢?于是网上查了查找到了一个解决办法,说是我项目的解释器应该设置为Anaconda安装目录下的python.exe,而不应该是系统自带的:https://blog.youkuaiyun.com/aanndd77/art

qq_39820505的博客 1万+

SpringMVC详细详细过程

SpringMVC过程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwiiHMvb-1601375407666)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200929125945758.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32e41iFe-1601375407670)(C:\Users\Administrator\

qq_42267491的博客 364

SpringBoot 系列教程(十二):给大家推荐20个SpringBoot开源项目,私活必备

基于 SpringBoot2.x + Shiro 实现了用户管理、个人微信、支付宝支付,内置扫码支付、后台回调、订单查询、限流等一系列功能

Thinkingcao的专栏 2839

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 290

matlab中figure对象详解

绘图窗口菜单File | Export Setup里很方便的改变这些属性,特别是Expand axes to fit figure,会更好减少空白边。 设置好可以保存模板,下次调用,也可以将这个功能写到m文件中,自动执行 1、Matlab是面向对象的。最高等级的对象是screen,它定义了figure可以用的最大szie。screen下面是figure。figue就是你画图的时候跳出来的那个新...

魔法森林博客 1万+

让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent

摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 321

day23 泛型 Set集合 二叉树 HashSet

泛型的好处把运行时期的问题提前到了编译期间避免了强制类型转换泛型的定义格式: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: : 指定多种类型的格式,多种类型之间用逗号隔开.例如: 不可以存储重复元素没有索引,不能使用普通for循环遍历不可以存储重复元素没有索引可以将元素按照规则进行排序TreeSet():根据其元素的自然排序进行排序。

2303_79357053的博客 1708

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

泛型、Set集合、TreeSet集合、二叉树

泛型、Set集合、TreeSet集合、二叉树

Achao_myFriend的博客 838

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java学习Day08------泛型、Set集合、二叉树

泛型、TreeSet、二叉树泛型泛型类泛型方法泛型接口类型通配符<?>Set集合TreeSet二叉树二叉查找树平衡二叉树 泛型 (1)概念:表示集合中存储的数据类型 (2)好处: a)把运行时期的问题提前到了编译期间 b)避免了强制类型转换(如果不添加泛型,集合中存储的数据是Object[]数组,在调用一些方法的时候就需要进行强制类型转换) (3)使用位置 类后面:成为泛型类 方法申明上:泛型方法 接口后面:泛型接口 (4)定义格式 <类型> 类型可以用任意字母代表 (5)注意事项:

dsh789的博客 303

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

泛型与set集合与二叉树

二叉树&set集合&泛型 目标如下 1,会使用泛型 2,会使用set集合,使用TreeSet进行排序 3,了解二叉树 泛型 Java中如果在写代码的时候,不知道数据类是什么类型,那么就可以使用泛型。泛型其实就是任意的数据类型。 泛型可以使用在哪些地方? 泛型类: 在类名后面<T>, 它表示在类中有一个不确定的数据类型。 泛型方法: 在方法的返回值前面<T>,它表示在方法中有一个不确定的数据类型 泛型接口:在接口名后面<T>,它表示在接口中有一个不确

qq_33111633的博客 211

day08 泛型、Set集合、二叉树

day08 泛型、Set集合、二叉树

qq_43329752的博客 180

JavaSE进阶07:泛型、Set集合、TreeSet、二叉树、红黑树

系列文章目录 JavaSE进阶01:继承、修饰符 JavaSE进阶02:多态、抽象类、接口 JavaSE进阶03:内部类、Lambda表达式 JavaSE进阶04:API中常用工具类 JavaSE进阶05:包装类、递归、数组的高级操作、异常 JavaSE进阶06:Collection集合、迭代器、List、ArrayList、LinkedList Java进阶作业 文章目录系列文章目录1.泛型1.1泛型概述2.Set集合2.1Set集合概述和特点【应用】2.2Set集合的使用【应用】3.TreeSet集合

XXXZhy丶Blog 635

递归泛型二叉树、List、Set、Map、队列Queue

一。 二叉树递归泛型版 泛型比较大小转成Comparable调用compareTo 将泛型值t强转Comparabl,调用compareTo用来比较 //date加到左边 if(node.lift==null){//节点左边如果为空把t给左边并return退出 node.lift=new Node<T>(t); return; } add

LDRaaa的博客 252

javaSE--进阶八(泛型,二叉树)

泛型 Java中如果在写代码的时候,不知道数据类是什么类型,那么就可以使用泛型。泛型其实就是任意的数据类型。 泛型可以使用在哪些地方? 泛型类: 在类名后面<T>, 它表示在类中有一个不确定的数据类型。 泛型方法: 在方法的返回值前面<T>,它表示在方法中有一个不确定的数据类型 泛型接口:在接口名后面<T>,它表示在接口中有一个不确定的数据类型 泛型类 在类名后面<T>, 它表示在类中有一个不确定的数据类型、 //定义一个盒子,用来装东西(什么东西,不

zhenyu93的博客 192

泛型及TreeSet二叉树

一,泛型 1.1泛型概述【理解】 泛型的介绍 ​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <E> <T> <类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <

weixin_46115287的博客 357

java进阶八(泛型,set,红黑树)

JavaSE进阶第八天 课程大纲: 泛型 Set集合 TreeSet HashSet 数据结构-二叉树 一.泛型 1.什么是泛型 广泛的类型,类似于小数数学中的x变量,你想让它是什么类型就可以是什么类型 泛型是JDK5之后出现的新特性(自动拆装箱、增强for和泛型), 泛型是一种在编译时期的一种安全机制,泛型只在编译时期有效,编译之后没有了(泛型的擦除) 2.泛型的好处 把运行时期的问题提前到了编译时期 避免了强制类型转换 3.泛型可以使用的地方 4.如何使用泛型 泛型一般定义在&

qq_59610837的博客 262

泛型、Set集合和树

Day08 今日内容 泛型 集合Set体系 TreeSet 数据结构-树形结构 https://visualgo.net/zh 今日目标 泛型【理解】 Set集合特点【了解、应用】 TreeSet集合的特点【了解、应用、重点】 数据结构-二叉树、平衡二叉树【理解】 01-泛型-概述 问题:集合中不写泛型默认是什么类型? Object 问题:集合中不写泛型,在类型转换的时候可能会出现什么问题? 类型不匹配会抛类型转换异常 问题:泛型有什么好处【作用】? 1.把运行时的问题提前到了编译

weixin_45520150的博客 184

笔记-09 - 集合(泛型 Set TreeSet 二叉树)

1.泛型 1.1泛型概述【理解】 泛型的介绍 ​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V> 1.2泛型类【应用】 定义格式 修饰符 class 类名&

qq_45181415的博客 280

[Java学习日记]泛型、树、Set系列集合

(2)如果这个时候晋升的节点有左子树,丢掉。(2)如果叔叔是黑色,自己是左孩子,就需要把父亲变为黑色(和叔叔一样),再把祖父设置为红色,再把祖父右旋。如果和左左一样,那么你就会发现A得到的新的左子树还是在原本的层级,树的长度并没有减少,直接右旋是无效的。(3)右左:和左右一样,直接左旋不行,需要先在根节点的右子节点进行右旋,再到根节点进行左旋。中序遍历:左子节点-当前节点-右子节点,在遍历二叉查找树,是按照从小到大的顺序去查找的。(3)如果叔叔是黑色,自己是右孩子,先左旋父亲,变成(2)情况,再进行判断。

m0_63186780的博客 133
上一篇: 集合、增强for、数据结构
下一篇: TreeSet的使用和比较器排序练习
Figure_TheKeyboard
博客等级 码龄5年 6粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值