泛型类的认识 - (了解数据结构的基础)

news2024/11/27 21:07:18

文章目录

  • 前言
  • 1. 为什么使用泛型类?
  • 2. 泛型类介绍
  • 总结


前言

本篇通过介绍为什么使用泛型类,什么是泛型类,进一步为以后数据结构的学习打下基础。如有错误,请在评论区指正,让我们一起交流,共同进步!


本文开始

1. 为什么使用泛型类?

泛型类:通过泛型类我们可以指定我们所需要的类型,方便我们使用.

当我们想要定义一个类,类中存在一个数组,想在数组中存取任意元素,我们应该想到什么呢?

会想到Object类,它是所有类的父类,我们能根据object任意存储,但是我们获取元素,去使用该元素时又出现困难,我们存储了各种类型(double,string,int…),例如我们想要计算加减等操作,面对大量存储的元素,我们不可能记忆每个元素的类型,想要强制转换这种想法也失败了,这就是为什么我们使用泛型类。

错误思想代码演示:

class Array {
    public Object[] obj = new Object[3];

    //获取pos位置的值返回
    public Object getObj(int pos) {
        return obj[pos];
    }
    //对obj数组进行赋值
    public void set(int pos,Object val) {
        obj[pos] = val;
    }
}
public class Test {
    public static void main(String[] args) {
        Array array = new Array();
        array.set(0,1);
        array.set(1,"aa");
        array.set(2,1.0);
        System.out.println(array.getObj(0));
        System.out.println(array.getObj(1));
        System.out.println(array.getObj(2));
        System.out.println("======================");
        //计算是需要强制,但对于大量数据会失败,不会记忆取到的数据类型是什么,无法完成强制类型转换
        int ret = (Integer) array.getObj(0) + 2;
        System.out.println(ret);
    }
}

下面会写正确的泛型类代码!

2. 泛型类介绍

泛型类: 将 类型 作为参数传递给类。使之能够指定我们所需要的类型,方便我们设置参数等操作。

1.语法:类名后加<>,表示该类为泛型类;
①<>括号中存放的是我们想要使用的类型,如果想设置为String,写成 < Sting >即可;
②<>括号中可以存放一个或多个类型,可以使用大写字母E,O,P,T,K,Y等

③<>括号中必须存放引用类型,不可以是基本数据类型

//<>中1个泛型
class Array<E> {
    public Object[] obj = new Object[3];  
    ...
 }
 
//<>中多个泛型
class Array<E,T,O> {
    ...
 }

2.泛型类的特点
①能够检查我们 传递类型是否准确;例如:我们设置为< Integer >,就不能设置字符串类型,浮点数类型等
②当我们获取值时,泛型类会自动转换为我们所需要的类型,设置类型为< String >,在介绍参数时直接用String字符类型接收就可以了。

泛型类代码:

class Array<E> {
    public Object[] obj = new Object[3];
    //获取pos位置的值返回
    public E getObj(int pos) {
        //数组是Object类型需要返回E类型需要强制转换
        return (E)obj[pos];
    }
    //对obj数组进行赋值
    public void set(int pos,E val) {
        obj[pos] = val;
    }
}

public class Test {
    public static void main(String[] args) {
       //<>括号中设置为什么类型,数组中就可以设置为什么类型
        Array<Integer> array = new Array<>();//整形
        array.set(0,1);
        array.set(1,2);
        System.out.println(array.getObj(0));
        System.out.println(array.getObj(1));
        System.out.println("======================");
        Array<String> array2 = new Array<>();//字符串类型
        array2.set(0,"aa");
        array2.set(1,"bb");
        System.out.println(array2.getObj(0));
        System.out.println(array2.getObj(1));
    }
}

代码结果:

在这里插入图片描述


总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

【强化学习论文合集】IJCAI-2021 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

户外运动耳机推荐、这几款性能超强的户外运动耳机不可错过

在户外跑步的时候&#xff0c;也有不少朋友会选择戴上耳机&#xff0c;用音乐来”调味“&#xff0c;让跑步的过程不那么枯燥乏味。凡事有利就有弊&#xff0c;跑步时听音乐也如此&#xff0c;它的弊端之一是可能会有安全隐患。如果跑步时耳机音量开得太大&#xff0c;可能会忽…

JAVA-GUI工具的编写-----简易框架篇

好久没写东西了&#xff0c;毕竟一个屁民没那么多东西写的&#xff0c;来来回回就老三样&#xff0c;扯犊子的也不想写&#xff0c;今天给大家来个都感兴趣的-------如何编写自己的GUI工具&#xff1f; 当然了&#xff0c;IDEA怎么去破解&#xff0c;这里就不多比比&#xff0c…

java基础一:基础概念、面向对象

目录 1.基础概念 2.IDEA 开发工具 2.1 JDK环境配置 2.2 注释和变量 2.3 标识符 2.4 数据类型 2.5 算术运算符 2.6 赋值运算符 2.7 关系运算符 2.8 逻辑运算符 2.9 三元运算符 2.10 流程控制 3. 面向对象 3.1类和对象 3.2 静态 static 3.3 package 包 3.4 impor…

Spark系列之Spark概述

title: Spark系列 What is Apache Spark™? Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. 第一章 Spark概述 1.1 Spark的产生背景 1.1.1 MapReduce的发展 1.1.…

【Flink】时间语义和水位线的概念和使用

文章目录一 时间语义与Wartermark1 Flink中的时间语义2 EventTime的引入3 Watermark&#xff08;水位线&#xff09;&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;水位线测试a 代码编写b 计算水位线c 计算结果d 深入分析&#xff08;3&#xff09;水位线时间测试…

【web前端期末大作业】html网上在线书城大学生静态网页 大学生html当当书城仿站 网上书城购物网页作业HTML

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

智慧城市解决方案典型应用

4.2.智慧城市建设目标 4.2.1.高标准的智慧城市基础设施 智慧城市的基础设施主要包括城市信息基础设施和城市空间数据基础设施两个方面。智慧城市建设的首要目标是要建立起完善的、高标准的智慧城市基础设施&#xff0c;并在此基础上建立完备的城市基础信息资源。高标准的城市…

微软文本转语音「免费网页版」

网站地址&#xff1a;Text To Speech - 在线文本转语音 大家好&#xff5e;今天给小伙伴们安利一个AI配音小工具:TTS-文本转语音 【闲话】 疫情三年&#xff0c;很多人都失去工作&#xff0c;有的也是断断续续。很多人负债累累&#xff0c;在全球形势严峻&#xff0c;经济下滑…

【FreeRTOS(三)】任务状态

文章目录任务状态任务挂起 vTaskSuspend取消任务挂起 vTaskResume挂起任务调度器 vTaskSuspendAll取消挂起任务调度器 xTaskResumeAll代码示例&#xff1a;任务挂起、取消任务挂起代码示例&#xff1a;挂起任务调度器、取消挂起任务调度器任务状态 freeRTOS任务的状态有四种&am…

【POJ No. 3321】 子树查询 Apple Tree

【POJ No. 3321】 子树查询 Apple Tree 北大OJ 题目地址 【题意】 在卡卡的房子外面有一棵苹果树&#xff0c;树上有N 个叉&#xff08;编号为1&#xff5e;N &#xff0c;根为1&#xff09;&#xff0c;它们通过分支连接。苹果在叉上生长&#xff0c;两个苹果不会在同一个叉…

1000道最新高频Java面试题,覆盖25个技术栈,从底层原理到架构

最近感慨面试难的人越来越多了&#xff0c;一方面是市场环境&#xff0c;更重要的一方面是企业对Java的人才要求越来越高了。 基本上这样感慨的分为两类人&#xff0c;第一&#xff0c;虽然挂着3、5年经验&#xff0c;但肚子里货少&#xff0c;也没啥拿得出手的项目&#xff0c…

【外卖项目实战开发四】

文章目录菜品管理业务开发文件上传下载文件上传介绍文件下载介绍文件上传代码实现文件下载代码实现新增菜品需求分析数据模型代码开发-准备工作代码开发-梳理交互过程菜品信息分页查询需求分析代码开发-梳理交互过程修改菜品需求分析代码开发-梳理交互过程停售/起售菜品&#x…

阿里P8大牛总结的Java锁机制入门笔记,堪称教科书式天花板

前言 锁机制无处不在&#xff0c;锁机制是实现线程同步的基础&#xff0c;锁机制并不是Java锁独有的&#xff0c;其他各种计算机语言中也有着锁机制相关的实现&#xff0c;数据库中也有锁的相关内容。这篇文章就是从Java入手&#xff0c;深入学习、理解Java中的锁机制&#xf…

【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、需求描述 想必大家都见过商场里的智能语音机器人&#xff0c;你对它提问时它可以自动回答你的问题&#xff0c;接下来我们也实现这样一个机器人&#xff0c;它依靠语音技术完成问询服务 基本功能如下 1&#xff1a;接收人们…

智能家居—— 树莓派摄像头捕捉人脸并识别

文章目录下载安装mjpg-streamer树莓派安装libcurl库树莓派安装openssl库语音控制开启摄像头线程拍照代码及步骤语音控制摄像头拍照camera.ccontrolDevice.h下载安装mjpg-streamer 参考博文&#xff1a;智能家居 —— 树莓派下载安装mjpg-streamer&#xff08;完成拍照录像监控…

市面上真正的全光谱灯品牌有哪些?全光谱护眼照明灯的作用很明显

众所周知&#xff0c;人眼感知任何事物都离不开光线的照射&#xff0c;但很多人可能不知道&#xff0c;光线不仅可以使我们“看得见”&#xff0c;还可以决定我们是否看得“真实”&#xff0c;这是怎么回事呢&#xff1f;其实这就是光线的色谱丰富度的问题。 人眼感知最舒适的光…

堆、堆排序、堆应用

一、概述 “堆”&#xff08;Heap&#xff09;&#xff0c;原地排序、时间复杂度O(nlogn)的排序算法。 堆是一个完全二叉树&#xff1b;堆中每一个节点的值都必须大于等于&#xff08;或者小于等于&#xff09;其子树中每个节点的值&#xff1b; 二、如何实现一个堆 使用数…

第2-4-7章 docker安装WorkBench-规则引擎Drools-业务规则管理系统-组件化-中台

文章目录8. WorkBench8.1 WorkBench简介8.2 安装方式8.2.1 传统方式安装8.2.2 docker安装drools workbench8.3 使用方式8.3.1 创建空间、项目8.3.2 创建数据对象8.3.3 创建DRL规则文件8.3.4 创建测试场景8.3.5 设置KieBase和KieSession8.3.6 编译、构建、部署8.3.7 在项目中使用…

Intel PAUSE 指令变化如何影响 MySQL 的性能

导读 x86、arm指令都很多&#xff0c;无论是应用程序员还是数据库内核研发大多时候都不需要对这些指令深入理解&#xff0c;但是 Pause 指令和数据库操作太紧密了&#xff0c;本文通过一次非常有趣的性能优化来引入对 Pause 指令的理解&#xff0c;期望可以事半功倍地搞清楚 C…