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

java中的泛型

文章目录

  • java中的泛型
    • 泛型的使用
      • 1 快速入门
      • 2 泛型的介绍
        • (1)使用泛型的好处
        • (2)泛型的理解
        • (3)泛型的语法
        • (4)泛型使用的注意事项
      • 3 自定义泛型
        • (1)自定义泛型类
        • (2)自定义泛型接口
        • (3)自定义泛型方法
      • 4 泛型的继承和通配符

java中的泛型

  我们先思考一下:为什么需要泛型?

  我们用一个集合进行举例:

public calss Generic {public static void main(String[] args) {ArrayList arrayList = new ArrayList();//添加数据arrayList.add(new Dog("大黄"));arrayList.add(new Dog("旺财"));//遍历集合,输出for(Object obj: arrayList) {Dog dog = (Dog) obj;           System.out.println(dog.getName());}}
}class Dog {String name;public Dog(String name) {this.name = name;}public String getName() {return this.name;}
}

  在上面的代码中,我们遍历集合并输出,需要将 Object 类型做一个类型转换,转换成 Dog 类型,这样才可以进行集合中元素的数据输出。但是,我们思考一下就不难发现,如果我们在集合中添加了一个不是 Dog 类型的数据呢?这样一想是不是就觉得,集合的遍历与输出马上就变得复杂了。

总结: 使用传统方式的缺点

  1. 不能对加入到集合的数据类型进行约束(这样的操作是很不安全的)
  2. 遍历的时候,需要进行类型的转换,如果集合中的数据量较大,对效率有一定的影响。

  既然有这个缺点,那我们怎么去解决呢?这就引出了这篇文章的内容 泛型 。没错,使用泛型可以解决以上的问题。

泛型的使用

1 快速入门

public calss Generic {public static void main(String[] args) {//表示存放到 ArrayList 集合中的元素是Dog类型ArrayList<Dog> arrayList = new ArrayList<Dog>();//添加数据arrayList.add(new Dog("大黄"));arrayList.add(new Dog("旺财"));//Dog 类型之外的数据无法加入//如果编译器发现添加的类型,不满足要求,就会报错 //arrayList.add("字符串");报错//遍历集合,输出//在遍历的时候,可以直接取出 Dog 类型而不是 Objecfor(Dog dog: arrayList) {          System.out.println(dog.getName());}        }
}class Dog {String name;public Dog(String name) {this.name = name;}public String getName() {return this.name;}
}

2 泛型的介绍

(1)使用泛型的好处
  1. 编译时,会检查添加元素的类型,提高了安全性。
  2. 减少了类型转换的次数,提高了效率。
(2)泛型的理解
  1. 泛型又称参数化类型,是 JDK 5.0 出现的新特性,解决数据类型的安全性问题。
  2. 在类声明或实例化时,只要指定好需要的具体类型即可。
  3. Java 泛型可以保证,如果程序在编译时没有发生警告,运行时就不会产生 ClassCastException 异常。同时,代码更加简洁。
  4. 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
public calss Generic {public static void main(String[] args) {//相当与 E = String //把 Dog 类中的 E 全部替换成 String//就是这条语句的效果Dog<String> dog1 = new Dog<String>();//相当与 E = String //把 Dog 类中的 E 全部替换成 Integer//就是这条语句的效果Dog<Integer> dog2 = new Dog<Integer>();}
}class Dog<E> {//属性使用泛型E name;//构造器使用泛型public Dog(E name) {this.name = name;}//方法的返回值使用泛型public E getName() {return this.name;}
}
(3)泛型的语法
  1. 泛型可以在类与接口中使用:

    interface 接口名<T> {}class 类名<K,V> {}

    • 其中,T、K、V 不代表值,而是表示类型。
    • 原则上,任意字母都可以。常用 T 表示,是 Type 的缩写。
  2. 泛型的实例化:要在类名后面指定类型参数的值(类型):

    • List<String> list = new ArrayList<String>();
    • Iterator<Customer> iterator = customers.iterator();
(4)泛型使用的注意事项
  1. interface 接口名<T> {}class 类名<K,V> {}

    • T、K、V 等只能是引用类型,不能是基本数据类型
    • 比如:List<Integer> list = new ArrayList<Integer>(); 可以通过没有问题,Integer 是引用类型。
    • 但是:List<int> list2 = new ArrayList<int>(); 这条语句是错误的,因为 int 为基本数据类型,不是引用类型。
  2. 在给泛型指定具体的类型之后,可以传入该类型或者其子类型。

public class Test {public static void main(String[] args) {//指定泛型为 AArrayList<A> list = new ArrayList<A>();//添加的类型只能是 A 类 及 其子类list.add(A);//因为 B 类继承了A,所以B类也可以存储在集合 list 中list.add(B);}
}class A {}
class B extends A {}
  1. 泛型的使用形式

    • 普通形式:List<Integer> list1 = new ArrayList<Integer>();
    • 简写形式:List<Integer> list2 = new ArrayList<>(); 这种形式下,编译器会根据我们前的内容自动的去推断我们后方的<>中的内容,在实际使用中,我们常用这种形式。
  2. 默认形式下:ArrarList list = new ArrayList(); 在这种形式下,编译器会自动将泛型指定为 Object 类型。


3 自定义泛型

(1)自定义泛型类

基本语法:

//泛型类
class 类名<T, R, ...> {//...表示可以有多个泛型// T, R, M 称为泛型的标识符, 一般是单个大写字母成员
}
//泛型接口
interface 接口名<T, R, ...> {}

注意事项:

  1. 普通成员可以使用泛型(属性、方法)
  2. 使用泛型的数组,不能初始化
  3. 静态方法中不能使用类的泛型
  4. 泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)
  5. 如果在创建对象时,没有指定类型,默认为 Object。
public class Test {public static void main(String[] args) {//创建对象不指定泛型,默认为ObjectStudent strdent = new Student();//没有指定泛型,相当于//Student<Object> student = new Student();}
}
//泛型类
class Student<T, R> {//属性使用泛型T t;R r;//方法使用泛型public T getT() {return t;}//数组使用泛型,不能进行初始化T[] arr1;//错误的语句如下://T[] arr2 = new T[2];//因为,泛型是在创建对象时才确定的//我们初始化数组,泛型是什么类型还没有确定下来//所以我们无法为其分配内存空间//java中数据类型所占的字节数是不同的//比如 int 4个字节//double 8个字节//静态方法不能使用类的泛型/* 下面语句是错误的static R f1() {return r;}因为,泛型是在创建对象时指定的而静态属性、静态方法,实在类加载进行初始化的也就是说,在泛型还没有指定的时候我们的静态成员就会先进行初始化*/
}
(2)自定义泛型接口

基本语法: interface 接口名<T, R, ...> {}

注意事项:

  1. 接口中,静态成员不能使用泛型(和泛型类一样)
  2. 泛型接口的类型,在继承接口或者实现接口时确定
  3. 没有指定泛型类型,默认为Object
public class Test {public static void main(String[] args) {}
}
//泛型接口
interface IA<T, R> {//下面的语句将会报错//T n = 10;//因为在接口中,属性都默认为 public static final 修饰//在普通方法中,可以使用泛型default void f1(T t) {      }
}
//在继承接口时,指定泛型的类型
interface IB extends IA<String, Integer> {
}
//在实现接口时,指定泛型的类型
class Dog implements IA<Double, String> {}
//如果没有指定,则泛型类型默认为 Object
(3)自定义泛型方法

基本语法:

修饰符 <T, R, ...> 返回类型 方法名(参数列表) {}

注意事项:

  1. 泛型方法,可以定义在普通类中,也可以定义在泛型类中
  2. 当泛型方法被调用时,类型会确定
  3. public void eat(E e) {} ,修饰符后没有 <T, R, …> eat 方法不是泛型方法,而是使用了泛型。
//在普通类中定义泛型方法
class A {//泛型方法public <T, R> void f1(T t, R r) {}
}
//在泛型类中定义泛型方法
class B<T, R> {public <E> void m1() {}
}public class Test {public static void main(String[] arts) {//调用泛型方法时,会确定泛型的类型A a = new A();//泛型方法的,T , R 会根据我们传入的类型自动确定//下面的语句,T = Integer; R = String//int 会自动进行装箱转为 Integera.f1(10, "xiong");}
}

4 泛型的继承和通配符

  1. 泛型不具备继承性

    List<Object> list = new ArrayList<String>();这条语句是错误的,虽然String 是 Object 的子类, 但是泛型不具备继承性。

  2. <?> :支持任意泛型类型。
List<String> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
//<?> :支持任意泛型类型
test1(list1);
test1(list2);public void test1(List<?> c) {for (Object object : c) { // 通配符,取出时,就是ObjectSystem.out.println(object);}
}
  1. <? extends A> :支持 A 类以及 A 类的子类,规定了泛型的上限。

    ? 表示我们要传入的泛型类型,它可以是 A 类,以及继承了 A 类的子类,不限于直接子类

  2. <? super A> :支持 A 类以及 A 类的父类,不限于直接父类,规定了泛型的下限。

    ? 表示我们要传入的泛型类型,它可以是 A 类,以及 A 类的父类,不限于直接父类

相关文章:

java中的泛型

文章目录 java中的泛型泛型的使用1 快速入门2 泛型的介绍&#xff08;1&#xff09;使用泛型的好处&#xff08;2&#xff09;泛型的理解&#xff08;3&#xff09;泛型的语法&#xff08;4&#xff09;泛型使用的注意事项 3 自定义泛型&#xff08;1&#xff09;自定义泛型类&…...

PCF8563一款工业级、低功耗多功能时钟/日历芯片

PCF8563是PHILIPS&#xff08;现NXP&#xff09;公司生产的一款工业级、内含I2C总线接口功能的低功耗多功能时钟/日历芯片。以下是对该芯片的详细介绍&#xff1a; 一、主要特性 低功耗&#xff1a;典型值为0.25μA&#xff08;VDD3.0V&#xff0c;Tamb25℃&#xff09;。宽电…...

Servlet快速入门

Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪&#xff0c;这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知&#xff0c;有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…...

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…...

【组件分享】商品列表组件-最佳实践

商品列表组件 商品列表组件用于展示商品信息列表&#xff0c;支持多种布局方式和自定义配置。 基础用法 <template><ProGoodsList :goods-list"goodsList" :layout"layout" item-click"handleItemClick" /> </template>&l…...

【JAVA】BOSS系统发版艺术:构建高效、优雅的微服务部署策略

在现代软件开发领域&#xff0c;微服务架构与容器化部署已迅速成为行业新趋势。微服务架构通过将应用拆分成多个小型、自治的服务单元&#xff0c;每个服务承担某项特定的业务功能。而容器化部署则以其轻量级和高度可移植的特性&#xff0c;为这些微服务的有效打包、分发和运行…...

React的响应式

在 React 中&#xff0c;useState 是一个 Hook&#xff0c;用于在函数组件中定义和管理状态。 setCount 是由 useState 返回的第二个值&#xff0c;用于更新状态并触发组件重新渲染。它的本质是一个状态更新函数&#xff0c;背后是 React 的状态管理和调度机制。下面是对 setCo…...

deep face cam 部署报错解决

这里写自定义目录标题 使用conda创建py3.9环境使用按照readme.txt安装所有依赖后遇到的报错2.最后一个模块insightface安装报错3.运行run.py又报错原因:解决方法:4.缺少模块解决方法:pip命令安装5.AttributeError: NoneType object has no attribute configure解决方法:安装…...

图像处理基础(4):高斯滤波器详解

本文主要介绍了高斯滤波器的原理及其实现过程 高斯滤波器是一种线性滤波器&#xff0c;能够有效的抑制噪声&#xff0c;平滑图像。其作用原理和均值滤波器类似&#xff0c;都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同&#xff0c;均值滤波器的…...

outlook附件限制最大5m如何解决

Outlook 附件大小限制为 5MB&#xff0c;通常由邮件服务器&#xff08;如 Exchange、Office 365、Gmail 等&#xff09;或本地 Outlook 配置决定。可以采取以下几种方法来解决该限制问题&#xff1a; 解决方案 1&#xff1a;调整服务器端限制&#xff08;管理员权限&#xff09…...

Word常见问题:嵌入图片无法显示完整

场景&#xff1a;在Word中&#xff0c;嵌入式图片显示不全&#xff0c;一部分图片在文字下方。如&#xff1a; 问题原因&#xff1a;因段落行距导致 方法一 快捷方式 选中图片&#xff0c;通过"ctrl1"快捷调整为1倍行距 方法二 通过工具栏调整 选中图片&#xff0…...

【面试题】java基础概念

以下是关于这道面试题的回答&#xff0c;包括JDK中一些相关概念的区别以及JIT的原理&#xff1a; JDK中相关概念区别 JDK、JRE和JVM JDK&#xff08;Java Development Kit&#xff09;&#xff1a;是Java开发工具包&#xff0c;它包含了JRE和一系列开发工具。JDK提供了编译、…...

WebSocket实现私聊私信功能

目录 后端pom.xmlConfig配置类Controller类DTO 前端安装相关依赖websocketService.js接口javascripthtmlCSS 效果展示简单测试连接&#xff1a; 报错解决方法1、vue3 使用SockJS报错 ReferenceError: global is not defined 后面将继续完善&#xff0c;待更新... 后端 pom.xml…...

进程的哪些内存类型容易引起内存泄漏

相信你在平时的工作中&#xff0c;应该遇到过下面这些场景&#xff1a; 伴随着服务器中的后台任务持续地运行&#xff0c;系统中可用内存越来越少&#xff1b; 应用程序正在运行时忽然被 OOM kill 掉了&#xff1b; 进程看起来没有消耗多少内存&#xff0c;但是系统内存就是不够…...

用着很顺手的电脑亮度随心随意调节

一、功能介绍 显示高级设置&#xff0c;可以调节屏幕RGB色彩。 娱乐亮度&#xff0c;一键娱乐亮度调节。 护眼亮度&#xff0c;保护眼睛&#xff0c;减少蓝光。 恢复正常&#xff0c;一键恢复到默认模块。 二、问题解答 1、亮度更改后显示器无变化&#xff01;软件根本都没…...

图片生成Prompt编写技巧

1. 图片情绪&#xff08;场景氛围&#xff09; 一张图片一般都会有一个情绪基调&#xff0c;因为作画本质上也是在传达一些情绪&#xff0c;一般都会借助图片的氛围去转达。例如&#xff1a;比如家庭聚会一般是欢乐、喜乐融融。断壁残垣一般是悲凉。还有萧瑟、孤寂等。 2.补充细…...

博客之星2024年度总评选——我的年度创作回顾与总结

2024年&#xff0c;是我在CSDN博客上持续耕耘、不断成长的一年。在此&#xff0c;与大家分享一下我的年度创作回顾与总结。 一、创作成长与突破 在人工智能领域&#xff0c;技术迭代迅速&#xff0c;知识更新频繁。为了保持自己的竞争力&#xff0c;在今年&#xff0c;我始终…...

前端Vue2项目使用md编辑器

项目中有一个需求&#xff0c;要在前端给用户展示内容&#xff0c;内容有 AI 生成的&#xff0c;返回来的是 md 格式&#xff0c;所以需要给用户展示 md 格式&#xff0c;并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…...

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进&#xff0c;Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程&#xff0c;大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具&#xff0c;与 Docker 的结合进一步增强了开发…...

kong 网关和spring cloud gateway网关性能测试对比

该测试只是简单在同一台机器设备对spring cloud gateway网关和kong网关进行对比&#xff0c;受限于笔者所拥有的资源&#xff0c;此处仅做简单评测。 一、使用spring boot 的auth-service作为服务提供者 该服务提供了一个/health接口&#xff0c;接口返回"OK"&…...

DDoS攻击防护能力测试:Python版脚本

引言 在互联网服务日益复杂和流量持续增长的今天&#xff0c;确保服务器能够应对高并发请求并具备良好的抗DDoS攻击的能力至关重要。声明以下代码仅在合法的前提下使用。 工具设计原理 脚本的核心在于它能够创建多个线程来并发执行不同的攻击方法&#xff0c;从而实现对目标…...

白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)

概述 秃头小码农们都知道&#xff0c;SwiftUI 不仅仅是一个静态 UI 构建框架那么简单&#xff0c;辅以海量默认或自定义的动画和过渡&#xff08;Transition&#xff09;特效&#xff0c;我们可以将 App 界面的绚丽升华到极致。 不过&#xff0c;目前 SwiftUI 中的过渡&#x…...

5.4 解锁 OpenAI - Translator:模块设计,构建翻译系统的 “基石”

OpenAI-Translator 模块设计 OpenAI-Translator 作为一款基于 OpenAI GPT 模型的智能翻译助手,其模块设计至关重要。为了保证翻译的高效性、准确性与可扩展性,系统需要一个结构清晰、功能强大的模块化设计。本文将对 OpenAI-Translator 的各个模块进行详细解析,涵盖其核心功…...

数据分析 变异系数

目录 变异系数的应用场景包括&#xff1a; 特点&#xff1a; 注意事项&#xff1a; np.nanvar——方差&#xff0c;np.sanstd标准差 简单来讲就是平均值/标准差 变异系数&#xff08;Coefficient of Variation, CV&#xff09;是一种相对量的变异指标&#xff0c;常用于衡…...

C语言——编译与链接

目录 前言 一程序的两种环境 1翻译环境 2执行环境 二预处理 1预处理符号 2#define 2.1#define 定义标识符 2.2#define 定义宏 2.2.1#和## 2.3带副作用的宏参数 2.4宏和函数的比较 2.5命名约定 3#undef 4命令行定义 5条件编译 5.1单分支 5.2多分支 5.3判断是…...

NewStar CTF week1 web wp

谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id&#xff0c;是一个占位符&#xff0c;按第二列排序用来测试列数&#xff0c;如果没有两列则会报错-1 union select 1,2 -1同样是占位符&#xff0c;union的作用是将注入语句合并到原始语句…...

Android BitmapShader简洁实现马赛克,Kotlin(一)

Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;一&#xff09; 这一篇&#xff0c; Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果&#xff0c;Kotlin&#xff08;3&#xff09;-CSDN博客 基于PorterDuffXfermode实现马…...

NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D

在全球拥有近100家工厂的舍弗勒&#xff0c;从2016年开启数字化运营进程&#xff0c;而当前制造、库存、劳动力和物流的数字化&#xff0c;已无法支持其进一步简化工作流程&#xff0c;亟需数字化物理制造环境&#xff0c;打造“数字孪生”工厂。 NavVis为其提供NavVis VLX 3…...

web服务器 网站部署的架构

WEB服务器工作原理 Web web是WWW(World Wide Web)的简称&#xff0c;基本原理是&#xff1a;请求(客户端)与响应(服务器端)原理&#xff0c;由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成 客户端发出请求的方式&#xff1a;地址栏请求、超链接请求、表单请求 …...

ecovadis验厂相关要求

EcoVadis验厂的相关要求主要包括以下几个方面&#xff1a; 一、企业基本资质要求 合法注册与运营&#xff1a;企业必须是合法注册并运营的法人实体&#xff0c;具备合法的经营资质&#xff0c;如营业执照、税务登记证等。无严重违法记录&#xff1a;在过去三年内&#xff0c;…...

SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别

目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言&#xff0c;Python也是高级编程语言&#xff1b;不是框架(框架&#xff1a;一般用于大型复杂需求项目&#xff0c;用于快速开发)具有三大特性&#xff0c;所谓Jav…...

Spring Boot中选择性加载Bean的几种方式

说明&#xff1a;用过Spring框架的都知道其自动装配的特性&#xff0c;本文介绍几种选择性加载Bean的方式。Spring自动装配参考以下两篇文章&#xff1a; 基于SpringBoot的三层架构开发&统一响应结果 SpringBoot自动装配原理简单分析 ConditionalOnProperty Conditiona…...

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中&#xff0c;垃圾回收&#xff08;GC&#xff09;是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…...

【实用技能】如何在Stimulsoft产品中使用用户函数,快速创建报表及仪表盘

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…...

MySQL四种隔离级别

MySQL的隔离级别是在事务这个大主题下面产生的说法。 那么什么是事务&#xff0c;事务就是一组sql语句&#xff0c;要么全部执行成功&#xff0c;要么都不执行&#xff0c;不能只执行成功其中的部分sql。事务的最终目的是为了保证数据库数据的完整性、一致性和可用性。 要保…...

Unity入门1

安装之后无法获得许可证&#xff0c;可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用&#xff0c;重开vstu&#xff0c;或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…...

qml Loader详解

1、概述 QML Loader是Qt Quick框架中的一个关键元素&#xff0c;它允许开发者动态地加载和卸载QML组件。这种动态加载机制对于提升应用程序的性能、响应速度和用户体验至关重要。通过Loader&#xff0c;应用程序可以在需要时才加载特定的组件&#xff0c;而不是在启动时一次性…...

《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; 《安富莱嵌入式周报》第349期&#xff1a;VSCode正式支持Matlab调试&#xff0c;DIY录音室级麦克风…...

web端ActiveMq测试工具

如何用vue3创建简单的web端ActiveMq测试工具&#xff1f; 1、复用vue3模板框架 创建main.js,引入APP文件&#xff0c;createApp创建文件&#xff0c;并加载element插件&#xff0c;然后挂载dom节点 2、配置vue.config.js脚本配置 mport { defineConfig } from "vite&qu…...

1561. 你可以获得的最大硬币数目

class Solution:def maxCoins(self, piles: List[int]) -> int:piles.sort()res,n0,len(piles)for i in range(n//3):respiles[n-2-2*i]return res这里如果"你"想要获取最大&#xff0c;那么从最大的开始找 每隔俩算一个最大累计&#xff0c;Bob默认自己从最小那找…...

NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (二)

实时通信应用 的主流技术 并非NIO &#xff0c; 整理本文的目的是 更好的理解 NIO 。 在现代的 即时聊天应用中&#xff0c;使用 WebSocket、MQTT 或 SignalR 等协议更为普遍。 若您想了解 当前主流的有关 实时通信应用 的技术 &#xff0c; 请移步他文。 (一) 业务场景 实…...

GD32L233RB 驱动数码管

1.数码管有8段A、B、C、D、E、F、G 和 H小数点 以及片选信号&#xff08;DIG&#xff09; DIG用来选择那一位&#xff0c;A-G 用来显示段 静态显示每次只能一次显示单个位 动态显示&#xff08;动态扫描&#xff09;所有的位显示结束要在10ms左右 显示2ms 消光1ms 实…...

AIGC视频生成模型:Stability AI的SVD(Stable Video Diffusion)模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Stability AI的视频生成模型SVD(Stable Video Diffusion)模型&#xff0c;这家公司在图像生成领域富有盛名&#xff0c;开发并维护了知名开源项目SD系列…...

Linux 系统错误处理简介

Linux 系统错误处理简介 1. errno&#xff1a;错误代码的载体2. strerror()&#xff1a;错误信息的翻译官3. perror()&#xff1a;便捷的错误信息输出4. 系统调用与库函数的区别5. 错误处理的最佳实践 在 C/C 程序开发中&#xff0c;我们经常需要处理各种错误情况 Linux 系统提…...

systemC示例

main.cpp #include <memory> using namespace std; #include "top.h" int sc_main(int i, char *av[]) { // 关闭关于 IEEE 1666 标准中过时特性的警告 sc_report_handler::set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); cout <…...

C++打字模拟

改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...

国产低功耗带LCD驱动和触摸按键功能的MCU

以下是国产低功耗、集成LCD驱动和触摸按键功能的MCU精选型号及其核心特性&#xff0c;结合性能、功耗和适用场景进行综合推荐&#xff1a; 1.灵动微MM32L0130系列 257 核心特性&#xff1a;低功耗&#xff1a;待机模式功耗低至100nA&#xff0c;支持多种低功耗模式。 LCD驱动&a…...

在 imx93 平台调试 nau88c10 声卡

一、环境介绍 linux 版本&#xff1a;6.6.52 soc&#xff1a;imx9331 codec&#xff1a;nau88c10 使用的内核文件为 Image&#xff0c;dtb 文件为&#xff1a;imx93-11x11-evk.dtb 二、硬件检查 i2s 信号线要接对 i2c 控制信号建议为 4.7k 上拉 codec 供电可以按参考设计…...

机器学习-分类算法评估标准

一. 准确率 accuracy 将预测结果和测试集的目标值比较&#xff0c;计算预测正确的百分比 准确率越高说明模型效果越好 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier #加载鸢尾花…...

美区TikTok解封后如何回归使用?

随着2025年初美区TikTok解封的消息引起了广泛关注&#xff0c;许多用户纷纷开始重新关注这一全球最受欢迎的短视频平台。在经历了数月的禁用期后&#xff0c;TikTok在美国市场的回归&#xff0c;代表了这一平台的巨大潜力和挑战。从用户的使用习惯&#xff0c;到平台的内容策略…...