当前位置: 首页 > article >正文

Java基础 Day19

一、泛型(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.lryc.cn/news/2386429.html

相关文章:

  • VMware+Windows 11 跳过安装阶段微软账号登录
  • HarmonyOS开发-应用间跳转
  • 网工每日一练
  • 使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?
  • 校园二手交易系统
  • 基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统
  • LangChain02-Agent与Memory模块
  • upload-labs通关笔记-第17关文件上传之二次渲染gif格式
  • 计算机网络学习20250525
  • STM32中的SPI通信协议
  • 从版本控制到协同开发:深度解析 Git、SVN 及现代工具链
  • redis Pub/Sub 简介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)
  • 《黄帝内经》数学建模与形式化表征方式的重构
  • PyTorch Image Models (timm) 技术指南
  • 基于Scikit-learn与Flask的医疗AI糖尿病预测系统开发实战
  • 掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别
  • 【Node.js】高级主题
  • 【Linux】定时任务 Crontab 与时间同步服务器
  • 【TCP/IP协议族详解】
  • 蓝桥杯电子赛_零基础利用按键实现不同数字的显现
  • Docker架构详解
  • Rust 学习笔记:关于生命周期的练习题
  • Spring AI 模块架构与功能解析
  • 单元测试学习笔记
  • 多模态大语言模型arxiv论文略读(九十)
  • (1-6-1)Java 集合
  • spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean
  • [安全清单] Linux 服务器安全基线:一份可以照着做的加固 Checklist
  • 企业级单元测试流程
  • 安卓开发用到的设计模式(2)结构型模式