一、泛型(JDK5引入)

1、基本概念

在编译阶段约束操作的数据类型,并进行检查

好处:统一数据类型,将运行期的错误提升到了编译期

泛型的默认类型是 Object

2、泛型类

在创建类的时候写上泛型

在创建具体对象的时候确定类型

E:Element

T:Type

K:Key

V:Value

public class GenericsDemo {public static void main(String[] args) {Student<String> stu1 = new Student<>("aaa", "1");}
}class Student<E> {private E name;private E id;public Student() {}public Student(E name, E id) {this.name = name;this.id = id;}public E getName() {return name;}public void setName(E name) {this.name = name;}public E getId() {return id;}public void setId(E id) {this.id = id;}public String toString() {return "Student{name = " + name + ", id = " + id + "}";}
}

3、泛型方法

(1)非静态方法:其泛型会根据类的泛型进行匹配,如上面的 getName()、getId() 方法

(2)静态方法:要声明出自己独立的泛型,在调用方法传参时确定实际的类型

public class GenericsDemo {public static void main(String[] args) {String[] arr1 = {"aaa", "ccc", "bbb"};Integer[] arr2 = {1, 2, 3};Double[] arr3 = {1.1, 2.2, 3.3};printArray(arr1);printArray(arr2);printArray(arr3);}public static<T> void printArray(T[] arr) {for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}

4、泛型接口

(1)可以在实现类实现接口时确定类型

(2)也可以让实现类继续使用泛型,在创建实现类对象时确定类型

5、泛型通配符

public static void func1(ArrayList<?> list) {}
public static void func2(ArrayList<? extends E> list) {}
public static void func3(ArrayList<? super E> list) {}? 表示 可以是任意类型
? extends E 表示 可以是E或E的子类
? super E 表示 可以是E或E的父类 

二、红黑树

1、简介

红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构

它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色

每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的

2、红黑规则

(1)颜色属性:每个节点非红即黑

(2)根属性:根节点必须为黑色

(3)叶子属性:所有叶子节点(NIL节点,空节点)均为黑色

(4)红色节点约束:红色节点的子节点必须为黑色(即不存在连续的红节点)

(5)黑高一致性:从任意节点到其所有叶子节点的路径中,包含的黑色节点数量相同

3、添加节点

节点默认是红色

三、TreeSet 集合

1、作用

对集合中的元素进行排序、去重操作(底层由红黑树实现)

2、两种排序方式

(1)自然排序

类实现Comparable 接口,想和哪个类作比较,泛型就写哪个类

重写compareTo 方法

根据方法的返回值来组织排序规则

compare方法,返回负值则节点往左,正值则节点往右,0则不存

TreeSet 集合的add 方法会自动调用 compareTo 方法

TreeSet<Worker> st = new TreeSet<>();
st.add(new Worker("aa", 30));
st.add(new Worker("bb", 33));
st.add(new Worker("cc", 31));
st.add(new Worker("dd", 32));
System.out.println(st);
// 默认是中序遍历(左根右)
// 按 id 升序排列class Worker implements Comparable<Worker>{String name;int id;@Overridepublic int compareTo(Worker o) {return this.id - o.id;}
}

(2)比较器排序

在 TreeSet 的构造方法中,传入 Compartor 接口的实现类对象

重写 compare 方法

根据方法的返回值, 来组织排序规则

比较器排序的优先级高于自然排序

Java已经写好的类大多有自然排序规则,可以用比较器对其进行覆盖

TreeSet<Worker> st = new TreeSet<>(new Comparator<Worker>() {@Overridepublic int compare(Worker o1, Worker o2) {return o1.getId() - o2.getId();    }
});
// 可以用 Lambda 表达式

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gitlab-Runner安装

文章目录 helm方式安装在K8S上参考gitlab CI/CD 文件变量缓存服务器K8S部署 docker镜像mavendocker安装docker buildx minionodehelmkubectlsonar-scanner-cli 问题清除cachehelm执行时无权限 下载镜像失败下载gitlab-runner镜像失败 Gitlab-ci中使用java前端 helm方式安装在K8…

在 Ubuntu linux系统中设置时区的方案

查看时区 在 Ubuntu 系统中&#xff0c;可以通过以下方法查看当前时区设置&#xff1a; 1. 使用 timedatectl 命令&#xff08;推荐&#xff09; 在终端运行以下命令&#xff1a; timedatectl输出示例&#xff1a; Local time: Sun 2025-05-25 10:30:00 CST Universal t…

YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)

文章目录 一、DepGraph剪枝(1)项目准备1)剪枝基础知识2)DepGraph剪枝论文解读12)DepGraph剪枝论文解读23)YOLO目标检测系列发展史4)YOLO网络架构(2)项目实战(YOLOv8应用DepGraph剪枝+finetune)1)安装软件环境(基础环境、Pytorch、YOLOv8)Windows1)安装软件环境(…

MySQL:11_事务

事务 一.CURD不加控制&#xff0c;会有什么问题&#xff1f; 二.什么是事务&#xff1f; 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0c;要么全部失败&#xff0c;是一个整体。MySQL提供一种机制&#xf…

【notepad++如何设置成中文界面呢?】

“Notepad”是一款非常强大的文本编辑软件&#xff0c;将其界面设置成中文的方法如下&#xff1a; 一、工具&#xff0f;原料&#xff1a; 华为 Matebook 15、Windows 10、Notepad 8.4.6。 二 、具体步骤&#xff1a; 1、找到任意一个文本文件&#xff0c;比如 txt 格式的文…

职坐标嵌入式MCU/DSP与RTOS开发精讲

嵌入式系统开发作为现代智能设备与工业控制的核心技术领域&#xff0c;其架构设计与实现逻辑直接影响系统性能与可靠性。本课程以嵌入式系统架构为切入点&#xff0c;系统化梳理从硬件选型到软件调度的全链路知识体系&#xff0c;重点聚焦微控制器&#xff08;MCU&#xff09;与…

双深度Q网络(Double DQN)基础解析与python实例:训练稳定倒立摆

目录 1. 前言 2. Double DQN的核心思想 3. Double DQN 实例&#xff1a;倒立摆 4. Double DQN的关键改进点 5. 双重网络更新策略 6. 总结 1. 前言 在强化学习领域&#xff0c;深度Q网络&#xff08;DQN&#xff09;开启了利用深度学习解决复杂决策问题的新篇章。然而&am…

使用KubeKey快速部署k8s v1.31.8集群

实战环境涉及软件版本信息&#xff1a; 使用kubekey部署k8s 1. 操作系统基础配置 设置主机名、DNS解析、时钟同步、防火墙关闭、ssh免密登录等等系统基本设置 dnf install -y curl socat conntrack ebtables ipset ipvsadm 2. 安装部署 K8s 2.1 下载 KubeKey ###地址 https…

SQL:窗口函数(Window Functions)

目录 什么是窗口函数&#xff1f; 基本语法结构 为什么要用窗口函数&#xff1f; 常见的窗口函数分类 1️⃣ 排名类函数 2️⃣ 聚合类函数&#xff08;不影响原始行&#xff09; 3️⃣ 值访问函数 窗口范围说明&#xff08;ROWS / RANGE&#xff09; 什么是窗口函数&a…

相机内参 opencv

视场角定相机内参 import numpy as np import cv2 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Ddef calculate_camera_intrinsics(image_width640, image_height480, fov55, is_horizontalTrue):"""计算相机内参矩阵参数:image_w…

MATLAB 各个工具箱 功能说明

​ 想必大家在安装MATLAB时&#xff0c;或多或少会疑惑应该安装哪些工具箱。笔者遇到了两种情况——只安装了MATLAB主程序&#xff0c;老师让用MATLAB的时候却发现没有安装对应安装包&#xff1b;第二次安装学聪明了&#xff0c;全选安装&#xff0c;嗯……占用了20多个G。 ​…

学习日记-day14-5.23

完成目标&#xff1a; 学习java下半段课程 知识点&#xff1a; 1.多态转型 知识点 核心内容 重点 多态转型 向上转型&#xff08;父类引用指向子类对象&#xff09; 与向下转型&#xff08;强制类型转换&#xff09;的机制与区别 向上转型自动完成&#xff0c;向下转型需…

【编程语言】【Java】一篇文章学习java,复习完善知识体系

第一章 Java基础 1.1 变量与数据类型 1.1.1 基本数据类型 1.1.1.1 整数类型&#xff08;byte、short、int、long&#xff09; 在 Java 中&#xff0c;整数类型用于表示没有小数部分的数字&#xff0c;不同的整数类型有不同的取值范围和占用的存储空间&#xff1a; byte&am…

汇量科技前端面试题及参考答案

数组去重的方法有哪些&#xff1f; 在 JavaScript 中&#xff0c;数组去重是一个常见的操作&#xff0c;有多种方法可以实现这一目标。每种方法都有其适用场景和性能特点&#xff0c;下面将详细介绍几种主要的去重方法。 使用 Set 数据结构 Set 是 ES6 引入的一种新数据结构&a…

Git实战演练,模拟日常使用,快速掌握命令

01 引言 上一期借助Idea&#xff0c;完成了Git仓库的建立、配置、代码提交等操作&#xff0c;初步入门了Git的使用。然而日常开发中经常面临各种各样的问题&#xff0c;入门级的命令远远不够使用。 这一期&#xff0c;我们将展开介绍Git的日常处理命令&#xff0c;解决日常问…

wordpress主题开发中常用的12个模板文件

在WordPress主题开发中&#xff0c;有多种常用的模板文件&#xff0c;它们负责控制网站不同部分的显示内容和布局&#xff0c;以下是一些常见的模板文件&#xff1a; 1.index.php 这是WordPress主题的核心模板文件。当没有其他更具体的模板文件匹配当前页面时&#xff0c;Wor…

数据库blog5_数据库软件架构介绍(以Mysql为例)

&#x1f33f;软件的架构 &#x1f342;分类 软件架构总结为两种主要类型&#xff1a;一体式架构和分布式架构 ● 一体化架构 一体式架构是一种将所有功能集成到一个单一的、不可分割的应用程序中的架构模式。这种架构通常是一个大型的、复杂的单一应用程序&#xff0c;包含所…

离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境&#xff0c;包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker&#xff0c;以便顺利部署深度学习算法。 前提条件&#xff1a; 目标离线服务器已安装操作系统&#xff08;本文以Ubuntu 18.04为例&#xff09…

chromedp -—— 基于 go 的自动化操作浏览器库

chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具&#xff0c;基于 Go 语言开发&#xff0c;专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能&#xff…

高级特性实战:死信队列、延迟队列与优先级队列(三)

四、优先级队列&#xff1a;优先处理重要任务 4.1 优先级队列概念解析 优先级队列&#xff08;Priority Queue&#xff09;是一种特殊的队列数据结构&#xff0c;它与普通队列的主要区别在于&#xff0c;普通队列遵循先进先出&#xff08;FIFO&#xff09;的原则&#xff0c;…