数据结构学习1 初识泛型

装箱和拆箱

装箱/装包: 把一个基本数据类型转变为包装类型

拆箱/拆包: 把一个包装类型转变为一个基本数据类型

        int a = 1;Integer i = a;// 自动装箱int b = i;// 自动拆箱Integer ii = Integer.valueOf(a);// 手动装箱,推荐使用 Integer.valueOf() 而不是 new Integer()int bb = ii.intValue();// 手动拆箱

自动装箱和自动拆箱

{int a = 1;//Integer ii = a; //自动装箱Integer ii = Integer.valueOf(a);
//        Integer ii2 = new Integer(2);Integer ii2 = Integer.valueOf(2);int b = ii2; //自动拆箱System.out.println(a);System.out.println(b);}

反汇编

new的时候调用了init构造方法

{Integer ii = 100;Integer ii2 = 100;System.out.println(ii == ii2);}

运行结果为

{Integer ii = 200;Integer ii2 = 200;System.out.println(ii == ii2);}

运行结果为

这是为什么呢

这既然是包装类型 , 那么可能调用了valueOf方法

可以看到最小值为-128

进入IntegerCache

最大值为128

如果在-128到127之间

那么返回的是下标为 i + 128的数组的值

因为存储的是-128到127

泛型

泛型在c++中叫做模版

引出泛型

实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值?

使用Object类型

class Myarray {public Object[] array = new Object[10];public void setValue(int pos, int val) {array[pos] = val;}public Object getValue(int pos) {return array[pos];}
}

代码定义了一个名为 Myarray 的类,其中有一个包含 Object 类型的数组 array,并提供了设置和获取数组元素值的方法。

然而,虽然数组的类型是 Object[],但 setValue 方法中将一个 int 类型的值直接赋给数组元素。这是因为数组的元素类型是 Object,而 int 是基本数据类型。在这种情况下,会发生自动装箱,将 int 装箱为 Integer

即不能放任意类型的元素

将setValue改为

public void setValue(int pos, Object val) {array[pos] = val;}

可以使用该数组存放任意类型的数据了

但是

为什么不能给String类型呢?

因为Object是String的父类类型

改为

String str = (String) myarray.getValue(2);

不过这数组中存放的是String类型

怎么又强转起来了?

感觉多此一举了

现在看看自己的目的:存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值

现在把类型改为

class Myarray<T> 
public T[] array = new T[];但是不能new一个 T 类型的数组

改成

public T[] array = (T[]) new Object[10];

暂时骗过编译器

可以发现不报错了

这里我觉得, 个人理解, T像是一个占位符 可以放String 也可以放Integer类型 (包装类型, 除了int是Integer , char是Character之外 其他都是本身大写)

总结

泛型的意义: 

1. 在编译的时候 检查数据类型是否正确

2. 在编译的时候, 帮助进行类型转换

补充:

要是

Myarray<Person> myarray1 = new Myarray<>();

改为

Myarray myarray1 = new Myarray();呢

是不会报错的

这种类型叫做裸类型

上面泛型的代码也可以写为

class Myarray<T> {
//    public T[] array = (T[]) new Object[10];public Object[] array = new Object[10];public void setValue(int pos, T val) {array[pos] = val;}public T getValue(int pos) {return (T) array[pos];}
}

有帮助的话记得点个赞哦

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

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

相关文章

安卓之导致ANR的原因分析,问题定位以及解决方案

一、引言 在Android应用开发中&#xff0c;Application Not Responding&#xff08;ANR&#xff09;是一种常见的性能问题&#xff0c;它直接关系到用户体验的质量。当应用在特定时间段内无法及时响应用户的交互或者系统事件时&#xff0c;系统将会抛出ANR错误&#xff0c;提示…

本地读取Excel文件并进行数据压缩传递到服务器

在项目开发过程中&#xff0c;读取excel文件&#xff0c;可能存在几百或几百万条数据内容&#xff0c;那么对于大型文件来说&#xff0c;我们应该如何思考对于大型文件的读取操作以及性能的注意事项。 类库&#xff1a;Papa Parse - Powerful CSV Parser for JavaScript 第一步…

html中,元素width和height的单位px、cm、mm、in、pc、pt、ch、em、rem、vh、vw、vmin、vmax的含义

在 HTML 中&#xff0c;元素的 width 和 height 属性可以使用多种单位来表示尺寸。下面是这些单位的含义&#xff1a; 像素&#xff08;px&#xff09;&#xff1a;像素是最常见的单位&#xff0c;表示固定的像素值。例如&#xff0c;width: 200px; 表示元素的宽度为 200 像素。…

springboot116基于java的教学辅助平台

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于java的教学辅助平台 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四…

要编译 Qt 的 .pro 工程,可以使用 qmake 和 make 工具

要编译 Qt 的 .pro 工程&#xff0c;可以使用 qmake 和 make 工具。下面是一个基本的 Makefile 示例&#xff0c;用于编译 Qt 的 .pro 工程&#xff1a; # 指定编译器 CXX g # 指定 qmake 命令的路径 QMAKE qmake# 指定目标文件名和可执行文件名 TARGET myapp# 定义源代码文…

R语言入门——多变量移除

目录 0、引言1、单变量删除的例子2、多变量移除2.1 ls的用法 2.2多变量删除 0、引言 有很多小伙伴在运行程序的时候就想在每次循环结束时提出一些占用内存大且无用的数据或变量&#xff0c;或者仅仅保留一些数据&#xff0c;但是rm的语法在删除多变量时候需要和ls()函数联用。…

Java中的深拷贝与浅拷贝

深拷贝与浅拷贝 深拷贝和浅拷贝是编程中常用的两种对象复制方式&#xff0c;它们在复制对象时处理对象内部引用的方式上有所不同。 浅拷贝 浅拷贝&#xff08;Shallow Copy&#xff09;只复制对象的顶层结构&#xff0c;而不复制对象内部的引用对象。换句话说&#xff0c;浅…

基于光口的以太网 udp 回环实验

文章目录 前言一、系统框架整体设计二、系统工程及 IP 创建三、UDP回环模块修改说明四、接口讲解五、顶层模块设计六、下载验证前言 本章实验我们通过网络调试助手发送数据给 FPGA,FPGA通过光口接收数据并将数据使用 UDP 协议发送给电脑。 提示:任何文章不要过度深思!万事万…

从白子画到东方青苍,你选择谁来守护你的修仙之旅?

从白子画到东方青苍,你选择谁来守护你的修仙之旅? 在繁花似锦的修仙世界中&#xff0c;每一位追梦者都渴望有那么一位守护者&#xff0c;与你共患难&#xff0c;共成长。热血与浪漫交织的《花千骨》与《苍兰诀》&#xff0c;给我们带来了两位风华绝代的守护者&#xff1a;白子…

磁盘初始化会丢失文件吗?答案揭晓!

“由于我的电脑出现了一些问题&#xff0c;我就将磁盘初始化了&#xff0c;但是里面还有很重要的文件&#xff0c;磁盘初始化了文件会丢失吗&#xff1f;有什么方法可以恢复丢失的文件呢&#xff1f;” 当我们谈论磁盘初始化&#xff0c;通常是指对硬盘或固态驱动器&#xff08…

解决执行npm(或pnpm)时报:证书过期 certificate has expired问题

项目执行 pnpm install 初始化时报 reason: certificate has expired 错误。 解决方案 1、取消ssl验证&#xff1a;npm config set strict-ssl false这个方法一般就可以解决了。2、更换npm镜像源&#xff1a;npm config set registry http://registry.cnpmjs.org npm config …

第13节-简历中的开放性问题

(点击即可收听) 不少公司的开放式题目每年不会有太大的变化&#xff0c;所以在答题前可先去相关求职论坛看看这些公司往年的问题&#xff0c;分析和思考自己应当怎么回答 开放式问题回答技巧 开放式问题主要考察的是求职者的求职动机、解决问题的能力、创造力等软实力&#xff…

initdb: command not found【PostgreSQL】

如果您遇到 “initdb: command not found” 错误&#xff0c;说明 initdb 命令未找到&#xff0c;该命令用于初始化新的 PostgreSQL 数据库群集。这通常是因为 PostgreSQL 相关的工具未正确安装或者安装路径不在系统的 PATH 变量中。 以下是解决这个问题的一些建议&#xff1a…

linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

前言&#xff1a; 目前服务器领域centos7基本是主流的操作系统&#xff0c;而linux相对于Windows来说&#xff0c;软硬件方面的支持是差很多的&#xff0c;在硬件方面来说&#xff0c;以一个免驱的网卡为例&#xff0c;window xp可能不会自动识别到&#xff0c;但Windows10基本…

wikijs在启动项目时遇到的问题

问题 使用PostgreSQL安装wikijs过程中&#xff0c;启动项目运行node server时&#xff0c;会报错如下&#xff1a; error: Database Initialization Error: create table "migrations" ("id" serial primary key, "name" varchar(255), "b…

JUC并发编程与源码分析学习笔记(二)

二十九、多线程锁之线程锁知识概述 说说Java“锁”事 从轻松的乐观锁和悲观锁开讲 通过8种情况演示锁运行案例&#xff0c;看看我们到底锁的是什么 公平锁和非公平锁 可重入锁&#xff08;又名递归锁&#xff09; 死锁及排查 写锁&#xff08;独占锁&#xff09;/读锁&a…

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…

【知识---OpenCV库中的图像滤波算法作用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言常见的图像滤波算法包括均值滤波、高斯滤波、中值滤波、双边滤波等&#xff0c;每种算法在不同的应用场景中都有其优劣之处。总结 前言 OpenCV&#xff08;Ope…

微信公众号怎么申请超过2个

一般可以申请多少个公众号&#xff1f;目前公众号申请数量的规定是从2018年底开始实施的&#xff0c;至今没有变化。规定如下&#xff1a;1、个人可以申请1个个人主体的公众号&#xff1b;2、企业&#xff08;有限公司&#xff09;可以申请2个公众号&#xff1b;3、个体户可以申…

MyBatis 的XML实现方法(JAVA)

数据库表的结构如下&#xff1a; DROP DATABASE IF EXISTS test; CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE test; -- 创建表[⽤⼾表] DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo ( id INT ( 11 ) NOT NULL AUTO_INCREMENT, user…