Java进阶学习之路

Java进阶之路

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

目录
  • Java进阶之路
  • 前言
  • 一、Java入门
    • Java基础
      • 1、Java概述
        • 1.1 什么是Java
        • 1.2 java的发展史
        • 1.3 java的特性和优势
        • 1.4 Java的跨平台性
        • 1.5 字节码
        • 1.6 JDK和JRE
          • 1.6.1 JDK和JRE的区别
          • 1.6.2 JDK安装
      • 2、Java基础语法
        • 2.1 基础数据类型
          • 2.1.1 计算机存储单元
          • 2.1.2 Java基本数据类型
      • 3、面向对象
        • 3.1 面向对象和面向过程
        • 3.2 对象和类
          • 3.2.1 对象内存图
        • 3.3 变量
          • 3.3.1 成员变量
        • 3.4 构造方法
          • 3.4.1 构造方法概述
          • 3.4.2 构造方法特点
      • 4、字符串
        • 4.1 String为什么是不可变的
        • 4.2 字符串常量池
        • 4.2 String.intern()
      • 5、数组
    • Java集合框架
  • 二、Java进阶
    • java高级特性
    • 多线程
      • 1、初识多线程
      • 2、进程和线程
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Java入门

Java基础

1、Java概述
1.1 什么是Java

java语言是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言,是一种面向Internet的编程语言。
Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。
随着Java技术在Web层面的不断成熟,已经称为Web应用程序的首选开发语言。
java语言的三个平台版本:
JavaSE: Java 语言的(标准版),用于桌面应用的开发,是其他两个版本的基础
JavaME: Java 语言的(小型版),用于嵌入式消费类电子设备
JavaEE: Java 语言的(企业版),用于 Web 方向的网站开发

1.2 java的发展史
  • 1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第一次提出了“Write Once,Run Anywhere”的口号。
  • 1999年4月27日,HotSpot虚拟机诞生。HotSpot虚拟机刚发布时是作为JDK 1.2的附加程序提供的,后来它成为JDK 1.3及之后所有JDK版本的默认Java虚拟机。
  • 2004年9月30日,JDK 5发布,工程代号为Tiger(老虎),是Java语言的发展史上的又一里程碑事件。JDK的版本不再是“1.x”的命名方式,而采用“JDK x”方式进行命名。
  • JDK 8的第一个正式版本于2014年3月18日发布,从JDK 8开始,Oracle启用JEP(JDK Enhancement Proposals)来定义和管理纳入新版JDK发布范围的功能特性。
  • JEP 126:对Lambda表达式的支持,这让Java语言拥有了流畅的函数式表达能力。
  • JEP 104:内置Nashorn JavaScript引擎的支持,成为Java的嵌入式JavaScript引擎。
  • JEP 150:新的时间、日期API。
  • JEP 122:彻底移除HotSpot的永久代。
  • ……
  • JDK9于2017年9月21日发布。JDK 9发布后,Oracle随即宣布Java将会以持续交付的形式和更加敏捷的研发节奏向前推进,以后JDK将会在每年的3月和9月各发布一个大版本。每六个JDK大版本中才会被划出一个长期支持(Long Term Support,LTS)版,只有LTS版的JDK能够获得为期三年的支持和更新,普通版的JDK就只有短短六个月的生命周期。JDK 8和JDK 11是LTS版,再下一个就到2021年发布的JDK 17了。
  • 2018年3月20日,JDK 10如期发布,这版本的主要研发目标是内部重构,诸如统一源仓库、统一垃圾收集器接口、统一即时编译器接口等,这些都将会是对未来Java发展大有裨益的改进。
  • 2018年9月25日,JDK 11发布,这是一个LTS版本的JDK,包含17个JEP,其中有ZGC这样的革命性的垃圾收集器出现,也有把JDK 10中的类型推断加入Lambda语法这种可见的改进。
  • 2019年2月,在JDK 12发布前夕,Oracle果然如之前宣布那样在六个月之后就放弃了对上一个版本OpenJDK的维护,RedHat同时从Oracle手上接过OpenJDK 8和OpenJDK 11的管理权利和维护职责。
  • 2019年3月20日,JDK 12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件(JMH)等新功能,最引人注目的特性无疑是加入了由RedHat领导开发的Shenandoah垃圾收集器。Shenandoah作为首个由非Oracle开发的垃圾收集器,其目标又与Oracle在JDK 11中发布的ZGC几乎完全一致,两者天生就存在竞争。Oracle马上用实际行动抵制了这个新收集器,在JDK 11发布时才说应尽可能保证OracleJDK和OpenJDK的兼容一致,转眼就在OracleJDK 12里把Shenandoah的代码通过条件编译强行剔除掉,使其成为历史上唯一进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能。
  • 2020年 3 月 17 日,JDK14 正式 GA(General Available),新增了Records、switch表达式(JDK 12和JDK 13中的预览特性,现在正式使用)、文本块等新特性。在JVM方面,弃用Parallel Scavenge和SerialOld GC组合、删除CMS垃圾回收器。
1.3 java的特性和优势
  • 简单性

与C语言不同,Java是一种面向对象编程的语言,他的底层借鉴了C++语言但又不是完全相同,Java语言并不支持多继承、指针、go to 语句、操作符重载、头文件等,但其语法基于C语言,免去了预处理操作。

  • 面向对象

Java语言是一个面向对象的语言,基本思想是使用对象、类、封装、继承、多态等概念进行程序设计。每一个物体都可以成为一个对象,其本身具有唯一性,有各自不同的变化状态,对Java来说,现有类,才有对象,对象是类实例化后的产物。

  • 可移植性

不同于其他语言,Java优点在于自身的跨平台和可移植性,在Java环境安装好后,会自带一个Java的虚拟机,它可以屏蔽掉不同操作系统之间的差异,实现了跨平台运行Java程序。

  • 高性能

在我们实际编写项目中通常会用到一些Java中间件,像网关、缓存、负载均衡、数据库、分布式架构等方面都有涉及,这都可以较快提高我们项目的性能,同时Java可以通过虚拟机来优化提升运行效率。

  • 分布式

分布式系统是由多个互通节点组成在一起的系统,主要有增加系统容量、加强系统可用、扩展性高、通过服务模块的拆分提升相应效率、团队协作流程得到改善等优点。基于Java自身可以实现信息之间的通信,通常使用TCP/IP异步通信可以达到分布式的效果。

  • 动态性

Java中的动态性主要体现在反射机制、动态字节码操作、动态编译、执行其他脚本编码等方面,在后期建立各模块之间的互通,这就意味着在现有的应用程序下可以实现各模块之间的互连。

  • 多线程

一个进程可以启动多个线程,例如:我们可以将火车站看作一个进程而其中的每一个售票窗口可以看作一个线程,每一个线程都有一个单独的栈空间,栈与栈之间互不干扰,各自执行各自的线程并发。

  • 安全性

Java安全措施主要体现在面向对象的规范上,主要包括:封装数据细节,只提供接口给用户、在Java除了基本类型的操作外都是引用的操作、数组边界检查、强制类型转换和语言对线程的支持。

  • 健壮性

在Java中有一种机制:自动垃圾回收机制(GC机制),Java虚拟机负责调动该机制,不需要编码者过多的干涉。

1.4 Java的跨平台性

我们知道java有跨平台的特性,即一次编译处处运行,其实质是jvm在编译java代码时,会将代码编译成.class的字节码文件,只要在不同的环境中安装对应的JDK(其中包含jvm),我们就可以运行程序了。

其实java虚拟机不仅可以支持java语言,对于其他语言,我们都可以通过把它转换成字节码文件,最后转换的字节码文件都能通过Java虚拟机进行运行和处理。随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。

Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件。也就是说Java虚拟机拥有语言无关性,并不会单纯地与Java语言“终身绑定”,只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,就能够被虚拟机所识别并装载运行。
Java跨平台原理

1.5 字节码

我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。
不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。

1.6 JDK和JRE
1.6.1 JDK和JRE的区别
  • JVM(Java Virtual Machine),Java虚拟机,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。包括了Java运行环境JRE、Java工具和Java基础类库。
  • JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)
  • JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具
    在这里插入图片描述
1.6.2 JDK安装
2、Java基础语法
2.1 基础数据类型
2.1.1 计算机存储单元

我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位 (bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,
通常用大写字母”B”表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,其换算单位如下:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

2.1.2 Java基本数据类型

数据类型

关键字

内存占用

取值范围

整数类型

byte

1

-128~127

short

2

-32768-32767

int(默认)

4

-2的31次方到2的31次方减1

long

8

-2的63次方到2的63次方减1

字符型

float

4

double(默认)

8

字符类型

char

2

0-65535

布尔类型

boolean

1

e35表示的是乘以10的38次方,同样e-45表示乘以10的45次方,在java中整数默认是int类型

3、面向对象
3.1 面向对象和面向过程
  • 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
  • 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
  • 面向对象设计程序(简称OOP):
3.2 对象和类
  • 类:类是构造对象的模板或蓝图;就是将具有相似的行为或者属性的事物抽象或者集合形成一个类;是抽象的、概念上的定义
  • 对象:是实际存在的该类事物的每个个体,是类的实例
  • 由类创建对象的过程称为创建类的实例
3.2.1 对象内存图
  • 单个对象内存图
    在这里插入图片描述
  • 多个对象内存图
    在这里插入图片描述
    总结:多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份
  • 多个对象指向相同内存图
    在这里插入图片描述
    总结:
    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)
    只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。
3.3 变量

在这里插入图片描述

3.3.1 成员变量

成员变量(方法外、类内)的声明格式:
【访问修饰符】【类型修饰符】<数据类型>变量名

  • 访问修饰符:设置变量的访问权限

访问级别

访问控制修饰符

同类

同包不同类(不含子类)

同包子类

不同包不同类

不同包子类

公开

public

受保护

protected

×

(注意)

默认

没有访问修饰符

×

×

私有

private

×

×

×

×

注:成员变量通常设置为private,然后在设置一些public权限的方法来设置、获取成员变量的值,防止由对象直接访问变量导致数据的错误、混乱或安全性问题。

3.4 构造方法
3.4.1 构造方法概述

在Java中,构造方法(Constructor)是一种特殊类型的方法,用于初始化对象

3.4.2 构造方法特点
  • 方法名称与类名相同:构造方法的名称必须与类名完全相同。
  • 没有返回类型:构造方法没有返回类型,甚至不写 void。
  • 在创建对象时自动调用:当使用 new 关键字实例化一个对象时,会自动调用该对象的构造方法。
  • 可以有多个构造方法:一个类可以有多个构造方法,根据参数列表的不同来区分构造方法的重载。
4、字符串
4.1 String为什么是不可变的

String内部是一个使用final修饰修饰的字符数组,所以不可变
在这里插入图片描述
为何这样设计

  • 安全性:字符串经常用于存储敏感信息,如网络连接的用户名、密码、URL等。如果字符串是可变的,那么这些信息可能会被恶意修改,从而导致安全问题。

  • 线程安全:由于字符串是不可变的,所以它们在多线程环境中是安全的,不需要额外的同步。

  • 哈希码缓存:字符串是哈希映射(如HashMap和HashSet)中常用的键类型。由于字符串的内容不会改变,所以它们的哈希码可以被缓存,而不需要每次使用时都重新计算。这可以提高哈希映射的性能。

  • 字符串池:Java虚拟机(JVM)维护了一个特殊的内存区域,称为字符串池(String Pool)。当你创建一个字符串字面量(如"Hello")时,JVM首先会检查字符串池中是否已经存在该值。如果存在,JVM将返回对现有字符串的引用;否则,JVM将在字符串池中创建一个新的字符串。这种技术可以节省内存,因为相同的字符串字面量只需要存储一次。

  • 从源码角度来看:String类的不可变性主要体现在其内部使用了一个私有的、最终的字符数组来存储其值,并且没有提供修改这个数组的方法。这意味着一旦一个String对象被创建,其内部的字符数组就不能被改变了。

4.2 字符串常量池

字符串常量池又称为字符串池,全局字符串池(Spring Pool)。在工作中,String类是我们使用频率非常高的一种对象类型。JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,就是字符串常量池。字符串常量池由String类私有保护。

4.2 String.intern()
/*** Returns a canonical representation for the string object.* <p>* A pool of strings, initially empty, is maintained privately by the* class {@code String}.* <p>* When the intern method is invoked, if the pool already contains a* string equal to this {@code String} object as determined by* the {@link #equals(Object)} method, then the string from the pool is* returned. Otherwise, this {@code String} object is added to the* pool and a reference to this {@code String} object is returned.* <p>* It follows that for any two strings {@code s} and {@code t},* {@code s.intern() == t.intern()} is {@code true}* if and only if {@code s.equals(t)} is {@code true}.* <p>* All literal strings and string-valued constant expressions are* interned. String literals are defined in section 3.10.5 of the* <cite>The Java&trade; Language Specification</cite>.** @return  a string that has the same contents as this string, but is*          guaranteed to be from a pool of unique strings.*/public native String intern();

由源码可知,String.intern()是一个native方法,注释大致意思是:如果常量池中存在当前字符串,就会直接返回当前字符串,如果常量池中没有此字符串,会将此字符串放入常量池中,然后返回。

5、数组

Java集合框架

二、Java进阶

java高级特性

多线程

1、初识多线程

多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持能够在同一时间执行多个线程,提升性能。

2、进程和线程
  • 进程:

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

SpringBoot使用 easy-captcha 实现验证码登录功能

文章目录 一、 环境准备1. 解决思路2. 接口文档3. redis下载 二、后端实现1. 引入依赖2. 添加配置3. 后端代码实现4. 前端代码实现 在前后端分离的项目中&#xff0c;登录功能是必不可少的。为了提高安全性&#xff0c;通常会加入验证码验证。 easy-captcha 是一个简单易用的验…

Android 常用命令和工具解析之Battery Historian

Batterystats是包含在 Android 框架中的一种工具&#xff0c;用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志&#xff0c;将收集的电池数据转储到开发机器&#xff0c;并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats…

如何安装PHP依赖库 更新2025.2.3

要在PHP项目中安装依赖&#xff0c;首先需要确保你的系统已经安装了Composer。Composer是PHP的依赖管理工具&#xff0c;它允许你声明项目所需的库&#xff0c;并管理它们。以下是如何安装Composer和在PHP项目中安装依赖的步骤&#xff1a; 一. 安装Composer 对于Windows用户…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

InnoDB和MyISAM的比较、水平切分和垂直切分、主从复制中涉及的三个线程、主从同步的延迟产生和解决

InnoDB和MyISAM的比较 事务支持&#xff1a; InnoDB支持&#xff1a;支持事务 (ACID 属性)。支持 Commit、Rollback 和 Savepoint 操作。适合需要事务处理的应用&#xff0c;例如银行系统。MyISAM:不支持事务。每次操作都是自动提交&#xff0c;不能回滚或中止。适合对事务要求…

【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据

2007-2019年各省科技支出占一般公共预算支出的比重数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、科技支出占一般公共预算支出的比重 4、范围&#xff1a;31省 5、指标解释&#xff1a…

tkvue 入门,像写html一样写tkinter

介绍 没有官网&#xff0c;只有例子 安装 像写vue 一样写tkinter 代码 pip install tkvue作者博客 修改样式 import tkvue import tkinter.ttk as ttktkvue.configure_tk(theme"clam")class RootDialog(tkvue.Component):template """ <Top…

哪些专业跟FPGA有关?

FPGA产业作为近几年新兴的技术领域&#xff0c;薪资高、待遇好&#xff0c;吸引了大量的求职者。特别是对于毕业生&#xff0c;FPGA领域的岗位需求供不应求。那么&#xff0c;哪些专业和FPGA相关呢&#xff1f; 哪些专业跟FPGA有关&#xff1f; 微电子学与固体电子学、微电子科…

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…

移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)

课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人

两种文件类型(pdf/图片)打印A4半张纸方法

环境:windows10、Adobe Reader XI v11.0.23 Pdf: 1.把内容由横排变为纵排&#xff1a; 2.点击打印按钮&#xff1a; 3.选择打印页范围和多页&#xff1a; 4.内容打印在纸张上部 图片&#xff1a; 1.右键图片点击打印&#xff1a; 2.选择打印类型&#xff1a; 3.打印配置&am…

JS-对象-BOM

BOM 概念:Browser Object Model 浏览器对象模型&#xff0c;允许|avaScript与浏览器对话&#xff0c;JavaScript 将浏览器的各个组成部分封装为对象 组成: Window : 浏览器窗口对象 Navigator : 浏览器对象 Screen : 屏幕对象 History : 历史…

Pytest+selenium UI自动化测试实战实例

今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c;有收获也有疑惑&#xff0c;总之最后还是搞个小项目出来证明自己的努力不没有白费。 环境准备 1 确保您已经安装了python3.x 2 配置python3pycharmselenium2开发环境 3 安装pytest库pip install p…

Linux中的基本指令(二)

一、移动和重命名指令mv 1.1基本作用及使用规范 基本作用是进行文件的移动和重命名&#xff0c;使用规范如&#xff1a; mv src[目录/文件]dst[路径/文件] 回车 1.2三种不同的作用 通过在src部分和dst部分写入不同的内容&#xff0c;来实现文件的移动和重命名的等不同功能…

Redis背景介绍

⭐️前言⭐️ 本文主要做Redis相关背景介绍&#xff0c;包括核心能力、重要特性和使用场景。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主…

【高阶数据结构(一)】:LRU Cache

LRU Cache 一、LRU Cache概念二、LRU Cache的实现三、实现 一、LRU Cache概念 LRU&#xff08;Least Recently Used&#xff09;最近最少使用&#xff0c;是一种cache替换算法。Cache的容量是优先的&#xff0c;当容量达到上限时&#xff0c;如果还有新的数据需要插入&#xff…

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的&#xff1a;画热图&#xff0c;分区&#xff0c;给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…

[数据结构] 线性表和顺序表

目录 线性表 顺序表的实现 顺序表各个方法的实现 boolean isFull() -- 判断数组是否放满 : void add(int data) -- 在数组末尾插入新元素 : void add(int pos,int data) -- 在指定位置插入元素 : boolean contain(int toFind) -- 判断是否包含某个元素 int indexOf(in…