数据结构(JAVA)包装类泛型

文章目录

  • 包装类
    • 基本数据类型和对应的包装类
    • 装箱和拆箱
    • 面试题
  • 泛型
    • 什么是泛型
    • 泛型的语法
    • 泛型类的使用
    • 泛型的使用
    • 裸类型(Raw Type) (仅需了解)
    • 擦除机制
    • 泛型的上界
    • 泛型方法


包装类

基本数据类型和对应的包装类

在这里插入图片描述
注意,除了int基本数据类型的包装类是Integer和char基本数据类型的包装类是Character以外的基本数据类型的包装类都是首字母大写。

装箱和拆箱

装箱:把基本数据类型变成包装类的过程,就叫作装箱。
拆箱:把包装类变成基本数据类型的过程,就叫作拆箱。
装箱分为显示装箱和自动装箱。
拆箱分为显示拆箱和自动拆箱。

显示装箱和自动装箱

    public static void main(String[] args) {int a = 15;Integer a1 = Integer.valueOf(a);//显示装箱Integer a2 = a;//自动装箱}

显示拆箱和自动拆箱

    public static void main(String[] args) {Integer a = 15;int a1 = a.intValue();//显示拆箱int a2 = 15;//自动拆箱}

自动装箱,自动拆箱的原理
自动装箱和自动拆箱的原理都是底层帮助我们调用valueOf 或者 intValue方法;
在这里插入图片描述

面试题

下面的代码的运行结果是什么?

public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);System.out.println(c == d);
}

当我们把上述代码运行,发现结果令人惊讶
在这里插入图片描述
为什么呢?明明两个结果都应该是true,但第一个是true 第二个是false?
我们发现这两个都是装箱操作,那么我们装箱是怎么工作的,也就是valueOf的逻辑是什么。
观察valueOf方法,当我们给valueOf方法传入一个值,并且他满足一定范围,返回一个数组值,不满足返回新的对象。
在这里插入图片描述
那这个方法的值范围是多少呢?
在这里插入图片描述
范围是[-128,127]。

泛型

什么是泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的
代码,这种刻板的限制对代码的束缚就会很大。---- 《Java编程思想》
通俗来讲,就是适用于许多许多类型。把想要的数据类型当作参数传递,需要什么类型,就传入什么类型。

泛型的语法

class 泛型类名称<类型形参列表> {// .....
}

类名后的 代表占位符,表示当前类是一个泛型类。
在这里插入图片描述

泛型类的使用

泛型类的语法

泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

new后面的<类型实参>中的类型实参可以省略,编译器可以根据上下文推导出类型实参。

泛型的使用

在这里插入图片描述

class MyArray <E>{public Object[] objects = new Object[10];public void setVal(int pos,E val) {objects[pos] = val;}public E getVal(int pos) {return (E)objects[pos];}
}public class Test {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();myArray.setVal(0,12);myArray.setVal(1,13);Integer a = myArray.getVal(1);System.out.println(a);}
}

我们以Integer为例,当我们以Integer类型当作参数传入,那E类型必须是整数类型,不能是其他类型。
如果传入其他类型,编译器会通过自动类型检查发现错误并报错。
在这里插入图片描述
注意<>内只能写类类型,不能写简单类型。

在这里插入图片描述

裸类型(Raw Type) (仅需了解)

裸类型是一个泛型类但没有带着类型实参(为了兼容老版本的api)

擦除机制

擦除机制:就是在编译时,将所有的E替换Object。

泛型的上界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。
示例一

class 泛型类名称<类型形参 extends 类型边界> {...
}
class MyArray <E extends Number>{public Object[] objects = new Object[10];public void setVal(int pos,E val) {objects[pos] = val;}public E getVal(int pos) {return (E)objects[pos];}
}

当我们规定E的上界时,此时传入的参数必须是Number或者是Number的子类。
如果不是将会报错。

在这里插入图片描述
示例二

public class MyArray<E extends Comparable<E>> {...
}

写一个泛型方法,求数组中的最大值。

在这里插入图片描述
观察上面的代码,发现在if判断句报错,这是为什么呢?
因为E的类型我们不知道,我们无法比较。
解决方法:让E继承Comparable接口。

class Alg <E extends Comparable<E>> {public E findMax(E[] array) {E max = array[0];for (int i = 1; i < array.length; i++) {if(max.compareTo(array[i]) < 0) {max = array[i];}}return max;}
}

注意<>中的数据类型必须实现了Comparable接口。如果没有将会报错
在这里插入图片描述

泛型方法

方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }
class Alg1 {public <E extends Comparable<E>>  E findMax(E[] array) {E max = array[0];for (int i = 1; i < array.length; i++) {if(max.compareTo(array[i]) < 0) {max = array[i];}}return max;}
}

调用泛型方法,有俩种。
1.java通过参数传递,推导出类型。
2.手动添加类型。
在这里插入图片描述

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

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

相关文章

机器学习核心:监督学习与无监督学习

个人主页&#xff1a;chian-ocean 文章专栏 监督学习与无监督学习&#xff1a;深度解析 机器学习是现代人工智能的核心支柱&#xff0c;已广泛应用于从数据挖掘到计算机视觉再到自然语言处理的诸多领域。作为机器学习最主要的两大类型&#xff0c;监督学习&#xff08;Super…

LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 视频微调(LoRA) 教程(3)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142882496 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SWIFT …

【Neo4j】- 轻松入门图数据库

文章目录 前言-场景一、Neo4j概述二、软件安装部署1.软件下载2.软件部署3.软件使用4.语法学习 总结 前言-场景 这里用大家都了解的关系数据与图数据据库对比着说,更加方便大家理解图数据库的作用 图形数据库和关系数据库均存储信息并表示数据之间的关系。但是&#xff0c;关系…

【Golang】Go语言web框架Gin响应客户端有哪些方式

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Navigation2 算法流程

转自 https://zhuanlan.zhihu.com/p/405670882 此文仅作学习笔记 启动流程 在仿真环境中启动导航包的示例程序&#xff0c;执行nav2_bringup/bringup/launch/tb3_simulation_launch.py文件。ROS2的launch文件支持采用python语言来编写以支持更加复杂的功能&#xff0c;本文件…

个人用操作系统笔记(待补充)

文章目录 一、绪论二、Linux操作系统进程线程&#xff08;进程内的基本调度单位&#xff09;文件与设备文件权限文件系统文件连接&#xff08;共享&#xff09; 地址空间缺页中断 用户超级用户root&#xff08;用户标识与组标识都是0&#xff09; 重定向系统启动常用命令 OS研究…

【优选算法篇】踏入算法的深邃乐章:滑动窗口的极致探秘

文章目录 C 滑动窗口详解&#xff1a;进阶题解与思维分析前言第二章&#xff1a;进阶挑战2.1 水果成篮解法一&#xff1a;滑动窗口解法二&#xff1a;滑动窗口 数组模拟哈希表复杂度分析&#xff1a;图解分析&#xff1a;示例&#xff1a;滑动窗口执行过程图解&#xff1a; 详…

ARM嵌入式学习--第三天

ARM常用伪指令分析 ARM伪指令&#xff1a;为了方便程序员使用&#xff0c;编译器设计的指令&#xff0c;这个指令ARM核无法识别&#xff0c;需要编译器对它翻译成ARM核所识别的指令 -LDR R1&#xff0c;0xabcdef分析 总结&#xff1a; 编译器在编译的时候&#xff0c;将ldr r…

深入拆解TomcatJetty(一)

深入拆解Tomcat&Jetty&#xff08;一&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1、Web容器是什么 早期的 Web 应用主要用于浏览新闻等静态页面&#xff0c;HTTP 服务器&#xff08;比如 Apache、Nginx&#xff09;向浏览器返…

008、相交链表

0、题目描述 相交链表 1、法1 嵌套循环&#xff0c;从listA的第一个节点开始与listB的每个节点比对&#xff0c;有相同的就返回这个节点。 时间复杂度是n^2 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* pa …

多媒体(1)

多媒体 多媒体的信息结构是【非线性的网状结构】 多媒体技术的基本特征&#xff1a;集成性、交互性、实时性、数字化、多样性 多媒体数据具有【数据量大】、【数据类型多】、【数据类型间区别小】、【输入输 出复杂】的特点 在多媒体数据库中&#xff0c;基于内容检索的关键技术…

智联云采 SRM2.0 testService SQL注入漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

【AI绘画】Midjourney进阶:引导线构图详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;什么是构图为什么Midjourney要使用构图 &#x1f4af;引导线构图特点使用场景提示词书写技巧测试 &#x1f4af;小结 &#x1f4af;前言 【AI绘画】Midjourney进阶&a…

嵌入式职业规划

嵌入式职业规划 在嵌入式的软件开发中&#xff0c;可以分为&#xff1a; 嵌入式MCU软件开发工程师&#xff1b; 嵌入式Linux底层&#xff08;BSP&#xff09;软件开发工程师&#xff1b; 嵌入式Linux应用开发工程师&#xff1b; 嵌入式FPGA算法开发工程师 对于前两个阶段 …

【时间之外】IT人求职和创业应知【9】

目录 1. 云计算ETF领涨,中证云计算与大数据主题指数估值较低 2. 南向资金持有海螺创业市值减少,但仍保持高比例持股 3. 深创赛澳大利亚分站赛落幕,龙岗区与3个意向落地项目签约 认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:数字战争…

ChatGPT官方自带的测试页面 Playground

Playground页面相当于是网页端的大模型调用应用&#xff0c;可以在这里直接选择不同类型模型、选择不同的参数、输入不同的提示测试模型输出结果&#xff0c;并且这个页面还可以查看网页端操作对应的代码&#xff0c;整体操作流程非常便捷&#xff0c;也非常适合初学者进行零代…

UE5 猎户座漂浮小岛 02 模型 地形

UE5 猎户座漂浮小岛 02 模型 地形 1.模型 1.1 导入 1.2 统一模型比例 1.3 添加碰撞体 2.地形 2.1 地 2.2 山体 2.3 海洋 2.4 花草

关于武汉芯景科技有限公司的限流开关芯片XJ6288开发指南(兼容SY6288)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.EN引脚控制IN和OUT引脚的通断 2.OCB引脚指示状态 3.过流自动断开

Java基于SSM框架的教学辅助微信小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

本文为系列测试文章&#xff0c;拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。 一、前置文章 构建后端为etcd的CoreDNS的容器集群&#xff08;一&#xff09;、生成自签名证书 构建后端为etcd的CoreDNS的容器集群&#xff08;二&#xff09;、下载最新的etcd容…