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

什么是java枚举?为什么要用java枚举?

什么是java枚举?

原始的接口定义常量

public interface IConstants {String MON = "Mon";String TUE = "Tue";String WED = "Wed";String THU = "Thu";String FRI = "Fri";String SAT = "Sat";String SUN = "Sun";
}

语法(定义)

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

/*** 枚举测试类* @author <a href="mailto:hemingwang0902@126.com">何明旺</a>*/
public enum EnumTest {MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);... ...

遍历、switch 等常用操作

对enum进行遍历和switch的操作示例代码:


public class Test {public static void main(String[] args) {for (EnumTest e : EnumTest.values()) {System.out.println(e.toString());}System.out.println("----------------我是分隔线------------------");EnumTest test = EnumTest.TUE;switch (test) {case MON:System.out.println("今天是星期一");break;case TUE:System.out.println("今天是星期二");break;// ... ...default:System.out.println(test);break;}}
}
输出结果:
MON
TUE
WED
THU
FRI
SAT
SUN

enum 对象的常用方法介绍

  • int compareTo(E o)
    • 比较此枚举与指定对象的顺序。
  • Class getDeclaringClass()
    • 返回与此枚举常量的枚举类型相对应的 Class 对象。
  • String name()
    • 返回此枚举常量的名称,在其枚举声明中对其进行声明。
  • int ordinal()
    • 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
  • String toString()
    • 返回枚举常量的名称,它包含在声明中。
  • static <T extends Enum> T valueOf(Class enumType, String name)
    • 返回带指定名称的指定枚举类型的枚举常量。

public class Test {public static void main(String[] args) {EnumTest test = EnumTest.TUE;//compareTo(E o)switch (test.compareTo(EnumTest.MON)) {case -1:System.out.println("TUE 在 MON 之前");break;case 1:System.out.println("TUE 在 MON 之后");break;default:System.out.println("TUE 与 MON 在同一位置");break;}//getDeclaringClass()System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName());//name() 和  toString()System.out.println("name(): " + test.name());System.out.println("toString(): " + test.toString());//ordinal(), 返回值是从 0 开始System.out.println("ordinal(): " + test.ordinal());}
}
输出结果:
TUE 在 MON 之后
getDeclaringClass(): com.hmw.test.EnumTest
name(): TUE
toString(): TUE
ordinal(): 1

给 enum 自定义属性和方法

给 enum 对象加一下 value 的属性和 getValue() 的方法:

public enum EnumTest {MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {@Overridepublic boolean isRest() {return true;}},SUN(0) {@Overridepublic boolean isRest() {return true;}};private int value;private EnumTest(int value) {this.value = value;}public int getValue() {return value;}public boolean isRest() {return false;}
}
public class Test {public static void main(String[] args) {System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue());}
}
输出结果:
EnumTest.FRI 的 value = 5

EnumSet,EnumMap 的应用

public class Test {public static void main(String[] args) {// EnumSet的使用EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);for (EnumTest day : weekSet) {System.out.println(day);}// EnumMap的使用EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);weekMap.put(EnumTest.MON, "星期一");weekMap.put(EnumTest.TUE, "星期二");Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator()// ... ...while (iter.hasNext()) {Entry<EnumTest, String> entry = iter.next();System.out.println(entry.getKey().name() + ":" + entry.getValue());}}
}

原理分析

enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum。EnumTest 经过反编译(javap com.hmw.test.EnumTest 命令)之后得到的内容如下:

public class com.hmw.test.EnumTest extends java.lang.Enum{public static final com.hmw.test.EnumTest MON;public static final com.hmw.test.EnumTest TUE;public static final com.hmw.test.EnumTest WED;public static final com.hmw.test.EnumTest THU;public static final com.hmw.test.EnumTest FRI;public static final com.hmw.test.EnumTest SAT;public static final com.hmw.test.EnumTest SUN;static {};public int getValue();public boolean isRest();public static com.hmw.test.EnumTest[] values();public static com.hmw.test.EnumTest valueOf(java.lang.String);com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest);
}

所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。

values()方法,在编译过程中产生

总结

可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

为什么要用java枚举?

需求背景

假设现在有两种订单类型:预订订单和非预订订单。

  • 需求一: 方法submitOrder根据不同订单类型进行不同的处理。
  • 需求二: 给一个对象: OrderResult设置订单类型。

实现方式

1.不使用枚举

public class EnumTest {private static final int ORDER_TYPE1 = 1;private static final int ORDER_TYPE2 = 2;public void submitOrder(int orderType,OrderResult orderResult){orderResult.setType(orderType);if(orderType == ORDER_TYPE1){System.out.println("订单类型1处理方法");}else if(orderType == ORDER_TYPE2){System.out.println("订单类型2处理方法");}}public static void main(String[] args) {EnumTest test = new EnumTest();test.submitOrder(3, new OrderResult());}
}

从代码中可以看到几点缺点:

  1. int参数不做类型检查,可以给上面的submitOrder方法传入任意int值
  2. 代码可读性低,如果没有文档或者源码,不知道给submitOrder传递的值的意义。

很多人在使用int枚举时,并没有像上例中将int值定义成static final。如果忘记定义变量为final则int枚举的值就可以被修改,如果忘记定义变量为static,就可能出现使用这个int值时,该int值还没有被初始化好。

2.枚举实现

public class EnumTest1 {private enum ORDER_TYPE{ORDER_TYPE1(1),ORDER_TYPE2(2);private final int value;private ORDER_TYPE(int value){this.value = value;}}public void submitOrder(ORDER_TYPE orderType,OrderResult orderResult){orderResult.setType(orderType.value);if(orderType == ORDER_TYPE.ORDER_TYPE1){System.out.println("订单类型1处理方法");}else if(orderType == ORDER_TYPE.ORDER_TYPE2){System.out.println("订单类型2处理方法");}}public static void main(String[] args) {EnumTest1 test = new EnumTest1();test.submitOrder(ORDER_TYPE.ORDER_TYPE1, new OrderResult());}
}
  1. 编译器将对enum进行类型检查,类型不符合的编译器会直接报错。
  2. 相比与int枚举型直接传int数值的方式,enum传递enum类型对象的方式,代码可读性更高,传递的枚举类型一目了然。
  3. enum类型中的对象本身就是static final的。

误区

private enum ORDER_TYPE{ORDER_TYPE1(1),ORDER_TYPE2(2);private final int value;private ORDER_TYPE(int value){this.value = value;}}

enum本质也是一个类,所以方法ORDER_TYPE(int value)是这个枚举类型的构造函数,故每个枚举类型在初始化的时候需要给构造函数传递响应的值,如: ORDER_TYPE1(1)。

这种情况下,想得到枚举类型对应的int数值时可以通过ORDER_TYPE.ORDER_TYPE1.value获取。

有些人可能会直接使用enum中的ordinal()方法直接实现enum类型与int类型的关联。ordinal()方法返回的是enum类型在被定义时的序数,如:

ORDER_TYPE.ORDER_TYPE1.value.ordinal()返回值为0。所以获取枚举类型对应的int数值貌似也可以通过ORDER_TYPE.PRE_ORDER.value.ordinal()+1实现。

序数是很不可靠的东西,序数是可以改变的,假设有一天ORDER_TYPE的定义变了,需要增加几种类型,或者不小心换了ORDER_TYPE1和ORDER_TYPE2定义时的顺序,这时就会造成很严重的bug,而且不好发现,编译时,运行时都不会有报错

相关文章:

什么是java枚举?为什么要用java枚举?

什么是java枚举&#xff1f; 原始的接口定义常量 public interface IConstants {String MON "Mon";String TUE "Tue";String WED "Wed";String THU "Thu";String FRI "Fri";String SAT "Sat";String SUN …...

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…...

准备篇(四)HTTP 基本原理

URI 和 URLURIURLURI vs URLHTTP 和 HTTPS超文本HTTPHTTP 请求与响应HTTPS你是否想过,在浏览器中敲入 URL 到 获取网页内容 之间发生了什么? 了解这些,有助于进一步了解爬虫的基本原理。 URI 和 URL URI(Uniform Resource Identifier),即统一资源标识符;URL(Universa…...

模板初阶笔记分享

有道云笔记...

使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展&#xff0c;大文件的传输成为了互联网应用的重要组成部分。然而&#xff0c;由于网络不稳定等因素的影响&#xff0c;大文件的传输经常会出现中断的情况&#xff0c;这时需要重新传输&#xff0c;导致传输效率低下。 为了解决这个问题&#xff…...

读取PDF中指定数据写入EXCEL文件

使用Java读取文件夹中的PDF文件,再读取文件中的指定的字体内容,然后将内容写入到Excel文件中,其中包含一些正则判断,可以忽略,字体以Corbel字体为例。 所需要的maven依赖为: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel…...

[黑马程序员SpringBoot2]——开发实用篇1

目录&#xff1a; 手工启动热部署自动启动热部署热部署范围配置关闭热部署功能第三方bean属性绑定松散绑定常用计量单位应用bean属性校验进制数据转换规则加载测试专用属性加载测试专用配置测试类中启动web环境发送虚拟请求匹配响应执行状态匹配响应体匹配响应体(json)匹配响应…...

Python------列表 集合 字典 推导式(本文以 集合为主)

推导式&#xff1a; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体。 共有三种推导&#xff…...

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…...

服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2

写在前面 因之前集群为centos6&#xff0c;已经很久没升级了&#xff0c;所以这次配置统一用户认证也是伴随系统升级到centos9时一起做的配套升级。新版的openldap配置大致与老版本比较相似&#xff0c;但有些地方配置还是有变化&#xff0c;另外&#xff0c;铺天盖地的帮助文…...

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…...

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…...

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————...

vue项目本地开发完成后部署到服务器后报404

vue项目本地开发完成后部署到服务器后报404是什么原因呢&#xff1f; 一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系…...

Android设计模式--状态模式

真知即所以为行&#xff0c;不行不足谓之知 一&#xff0c;定义 当一个对象的内在状态改变时&#xff0c;允许改变其行为&#xff0c;这个对象看起来像是改变了其类。 这么说可能很难理解&#xff0c;通俗来讲就是当一个对象它有多种状态的时候&#xff0c;把每一种状态的行为…...

C++关系运算符重载

#include<iostream> using namespace std;class Person { public:string name;int age;Person(string n, int a){name n;age a;}//friend bool operator(Person& p1, Person& p2); 使用友元//成员函数实现函数关系符重载bool operator(Person& p) {if (na…...

HLS基础issue

hls 是一个用C/c 来开发PL &#xff0c;产生rtl的工具 hls是按照rtl code来运行的 &#xff0c; 但是rtl会在不同器件调用不同的源语&#xff1b; 可能产生的ip使用在vivado另外一个器件的话 会存在问题&#xff1b; Hls &#xff1a; vivado ip &#xff0c; vitis kernel 是…...

C#特性(Attribute)

C#特性&#xff08;Attribute&#xff09;是一种在程序中添加元数据的机制&#xff0c;它可以为代码提供额外的信息和指示。通过使用特性&#xff0c;我们可以为类、方法、属性等元素添加标记&#xff0c;以便在运行时进行更多的操作和决策。 C#特性是一种声明式编程的工具&…...

【设计模式】七大设计原则

七大设计原则 文章目录 七大设计原则一、概述二、单一职责原则三、接口隔离原则四、依赖倒转原则五、里氏替换原则六、开闭原则七、迪米特法则八、合成复用原则 一、概述 设计模式是为了让程序(软件)&#xff0c;具有更好代码重用性&#xff0c;可读性&#xff0c;可扩展性&am…...

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大的功能和工具&…...

Day32力扣打卡

打卡记录 买卖股票的最佳时机 IV&#xff08;状态机DP&#xff09; 链接 class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:n len(prices)max lambda x, y: x if x > y else yf [[-0x3f3f3f3f] * 2 for _ in range(k 2)]for i in range(k 2…...

抗击.Elbie勒索病毒:如何应对.Elbie病毒威胁,保卫您的数据

导言&#xff1a; .Elbie勒索病毒如今成为网络世界中的一大威胁&#xff0c;其狡猾性让用户防不胜防。本文将深入介绍.Elbie病毒的特点、对数据的威胁&#xff0c;提供被感染文件的恢复方法&#xff0c;并详述一系列强化网络安全的预防措施&#xff0c;让您远离.Elbie勒索病毒…...

Vue3 函数式弹窗

运行环境 vue3vitetselement-plus 开发与测试 1. 使用h、render函数创建Dialog 建议可在plugins目录下创建dialog文件夹&#xff0c;创建index.ts文件&#xff0c;代码如下 import { h, render } from "vue";/*** 函数式弹窗* param component 组件* param opti…...

如何解决 Critical dependency: the request of a dependency is an expression ?

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; ruoyi-nbcio: nbcio-boot的若依版本,基于ruoyi-flowable-plus和flowable6.7.2&#xff0c;目前处于开发功能完善阶段&#xff0c;目标是打造一个最好的若依平台上flowable流程管理系统开源版本&…...

挑战视觉边界,探索图形验证码背后的黑科技

在日常生活中&#xff0c;我们登录网站或者其他平台时&#xff0c;在填写完账号密码之后&#xff0c;还会让我们填写4或6位的数字或者英文字母等&#xff0c;填写正确才能请求登录。这个其实是防止某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试&#xff0c;如下…...

【网络奇缘】- 计算机网络|网络类型|性能指标

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分类 1.根据范围分类 ​编辑 2.按使用者分​编辑 3.按交换技术分 ​编辑4.按拓扑结构分 ​…...

Leetcode—剑指Offer LCR 140.训练计划II【简单】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—LCR 140.训练计划II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* trainingPlan(struct ListNode* head, int cnt) {str…...

梦想编织者——Adobe Dreamweaver

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 “梦想编织者”&#xff0c;是集网页制作和管理网站于一身的所见即所得网页代码编辑器。 利用对 HTML、CSS、JavaScript等内容的支持&#xff0c;设计人员…...

springMVC学习笔记-请求映射,参数绑定,响应,restful,响应状态码,springMVC拦截器

目录 概述 springMVC做了什么 springMVC与struts2区别 springMVC整个流程是一个单向闭环 springMVC具体的处理流程 springMVC的组成部分 请求映射 RequestMapping 用法 属性 1.value 2.method GET方式和POST方式 概述 HTTP给GET和POST做了哪些规定 GET方式&…...

Python实现视频字幕时间轴格式转换

自己喜欢收藏电影&#xff0c;有时网上能找到的中文字幕文件都不满足自己电影版本。在自己下载的压制版电影中已内封非中文srt字幕时&#xff0c;可以选择自己将srt的时间轴转为ass并替换ass中的时间轴。自己在频繁 复制粘贴改格式的时候想起可以用Python代码完成转换这一操作&…...

蓝桥杯 枚举

例题讲解 特别数的和 #include<iostream> using namespace std; bool ifspecial(int n){while(n){if(n%100||n%101||n%102||n%109){return true;} n/10;}return false; } int main(){int n;cin>>n;int sum0;for(int i1;i<n;i){if(ifspecial(i)){sumi;}}cout&l…...

C#的MessagePack(unity)--02

高级API (MessagePackSerializer) MessagePackSerializer类是MessagePack for C# 的入口点。静态方法构成了MessagePack for C# 的主要API。 APIDescriptionSerialize<T>将一个对象图序列化为MessagePack二进制块。可以使用异步变体获取Stream。也有非泛型重载可用。De…...

MySQL数据库管理--- mysql数据库迁移-v查看报错sql

默认情况下&#xff1a;每个客户端连接都会在服务器进程中拥有一个线程。 每个线程相当于一个LOCALNO的oracle远程链接。 1 该连接的查询只会在这个单独的线程中执行&#xff0c;该线程驻留在一个内核或者CPU上&#xff0c;服务器维护一个 缓冲区&#xff0c;用于存放已就绪的线…...

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于秃鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…...

向pycdc项目提的一个pr

向pycdc项目提的一个pr 前言 pycdc这个项目&#xff0c;我之前一直有在关注&#xff0c;之前使用他反编译python3.10项目&#xff0c;之前使用的 uncompyle6无法反编译pyhton3.10生成的pyc文件&#xff0c;但是pycdc可以&#xff0c;但是反编译效果感觉不如uncompyle6。但是版…...

Spring学习③__Bean管理

目录 IOC接口ApplicationContext 详解IOC操作Bean管理基于xml方式基于xml方式创建对象基于xml方式注入属性使用set方法进行注入通过有参数的构造进行注入p 名称空间注入&#xff08;了解&#xff09; 基于xml方式注入其他类型属性xml 注入数组类型属性 IOC接口 IOC思想基于IOC…...

《视觉SLAM十四讲》-- 后端 2

文章目录 09 后端 29.1 滑动窗口滤波和优化9.1.1 实际环境下的 BA 结构9.1.2 滑动窗口法 9.2 位姿图9.2.1 位姿图的意义9.2.2 位姿图优化 09 后端 2 9.1 滑动窗口滤波和优化 9.1.1 实际环境下的 BA 结构 由于计算机算力的限制&#xff0c;我们必须控制 BA 的规模&#xff0c…...

安装插件时Vscode XHR Failed 报错ERR_CERT_AUTHORITY_INVALID

安装插件时Vscode XHR Failed 报错ERR_CERT_AUTHORITY_INVALID 今天用vscode 安装python插件时报XHR failed,无法拉取应用商城的数据&#xff0c; 报的错如下&#xff1a; ERR_CERT_AUTHORITY_INVALID 翻译过来就是证书有问题 找错误代码的方法&#xff1a; 打开vscode, 按F1…...

ON_WM_TIMER()

ON_WM_TIMER() static_cast: cannot convert from void (__cdecl CPop::* )(UINT) to void (__cdecl CWnd::* )(UINT_PTR) OnTimer(UINT nIDEvent) ----> OnTimer(UINT_PTR nIDEvent)...

【Unity】单例模式及游戏声音管理类应用

【Unity】单例模式及游戏声音管理类应用 描述 在日常游戏项目开发中&#xff0c;单例模式是一种常用的设计模式&#xff0c;它允许在应用程序的生命周期中只创建一个对象实例&#xff0c;并提供对该实例的全局访问点。通过使用单例模式&#xff0c;可以提高代码的可维护性和可…...

视频剪辑技巧:轻松搞定视频随机合并,一篇文章告知所有秘诀

在视频制作的过程中&#xff0c;视频随机合并是一种创新的剪辑手法&#xff0c;它打破了传统的线性剪辑模式&#xff0c;使得视频剪辑更加灵活和有趣。通过将不同的视频片段随机组合在一起&#xff0c;我们可以创造出独特的视觉效果和情感氛围。这种剪辑方式让观众在观看视频时…...

torch.stack

看网上看多没讲的不是很明白&#xff0c;我来试试空间上的理解 # 假设是时间步T1的输出 T1 torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) # 假设是时间步T2的输出 T2 torch.tensor([[10, 20, 30],[40, 50, 60],[70, 80, 90]])输出&#xff1a; print(torch.stack((T1,T2…...

手搓哈希表、列表、队列,只为了用C语言快速求解华容道游戏,我不是大佬,只是一个游戏算法爱好者

背景 多年前曾经写过C语言求解华容道&#xff0c;当时没有用到哈希表&#xff0c;导致整个查重搜索数组过大&#xff0c;每次求解都得花上数分钟的时间&#xff0c;如今时过境迁&#xff0c;对数据结构和算法有了更深的理解&#xff0c;所以得把这一块补上了。(其实就是最近想…...

MySQL 的执行原理(一)

5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二 级索引&#xff0c;MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…...

2023_“数维杯”问题B:棉秸秆热解的催化反应-详细解析含代码

题目翻译&#xff1a; 随着全球对可再生能源需求的不断增加&#xff0c;生物质能作为一种成熟的可再生能源得到了广泛的关注。棉花秸秆作为一种农业废弃物&#xff0c;因其丰富的纤维素、木质素等生物质成分而被视为重要的生物质资源。虽然棉花秸秆的热解可以产生各种形式的可…...

django理解01

接在Vue理解01后 项目创建 pycharm上下载django框架 在需要创建项目的文件夹终端django-admin startproject 项目名终端创建APPpython manage.py startapp app名注册APP&#xff0c;settings.py里INSTALLED_APPS下&#xff0c;增加一项&#xff1a;app名.apps.类名&#xff0…...

限制Domain Admin登录非域控服务器和用户计算机

限制Domain Admin管理员使用敏感管理员帐户(域或林中管理员组、域管理员组和企业管理员组中的成员帐户)登录到信任度较低的服务器和用户端计算机。 此限制可防止管理员通过登录到信任度较低的计算机来无意中增加凭据被盗的风险。 建议采用的策略 建议使用以下策略限制对信任度…...

原来机械硬盘比内存慢10万倍

我们都知道机械硬盘的速度很慢&#xff0c;内存的速度很快&#xff0c;那么不同存储器之间的差距到底有多大呢&#xff1f; 我们先来看一幅图&#xff1a; CPU访问寄存器的时间是0.3纳秒&#xff0c;访问L1高速缓存的时间是1纳秒&#xff0c;访问L2高速缓存的时间是4纳秒… 秒…...

ElementUI的Dialog弹窗实现拖拽移动功能

文章目录 1. ElementUI简介2. 弹窗基本使用3. 实现拖拽移动功能4. 拓展与分析 &#x1f389;欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&a…...

生成式AI模型量化简明教程

在不断发展的人工智能领域&#xff0c;生成式AI无疑已成为创新的基石。 这些先进的模型&#xff0c;无论是用于创作艺术、生成文本还是增强医学成像&#xff0c;都以产生非常逼真和创造性的输出而闻名。 然而&#xff0c;生成式AI的力量是有代价的—模型大小和计算要求。 随着生…...