【数据结构 |集合框架、泛型】初始集合框架、时间(空间)复杂度、简单认识泛型

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 
🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈


✨✨ 帅哥美女们,我们共同加油!一起进步!✨✨ 

目录

集合框架

时间复杂度

大O渐进表示法:

空间复杂度

包装类

1.装箱和卸箱

泛型

1.泛型的定义

2.擦除机制

3.泛型的上届

4.泛型方法 


集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes。

集合框架是由不同的很多类组成的一个集合,而不同类的背后有着不同的数据结构(数据 + 结构)储存、组织数据的方式不一样

  • Collection是一个接口,包含了大部分容器常用的一些方法
  • List是一个接口,规范了ArrayList LinkedList中要实现的方法
  • ArrayList实现了List接口,底层为动态类型顺序表
  • LinkedList:实现了List接口,底层为双向链表
  • Stack:底层是栈,栈是一种特殊的顺序表
  • Queue:底层是队列,队列是一种特殊的顺序表
  • Deque:是一个接口
  • Set:集合,是一个接口,里面放置的是K模型
  • HashSet:底层为哈希桶,查询的时间复杂度为O(1)
  • TreeSet:底层为红黑树,查询的时间复杂度为O( log2N),关于key有序的
  • Map:映射,里面存储的是K-V模型的键值对
  • HashMap:底层为哈希桶,查询时间复杂度为O(1)
  • TreeMap:底层为红黑树,查询的时间复杂度为O( log2N),关于key有序

时间复杂度

时间复杂度用来决定算法所需要的运行速度。

算法的时间复杂度是一个数学函数,算法中基本操作的执行次数,为算法的时间复杂度。 

大O渐进表示法:

我们不一定要计算精准的执行次数,而只需要大概算出大概执行次数

O 符号( Big O notation ):是用于描述函数渐进行为的数学符号
使用方法:
  • 用常数一取代运行时间里全部的加法常数
  • 在修改后运行次数函数中只保留最高项
  • 如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O

通过上面我们会发现大O的渐进表示法去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数,在实际中一般情况关注的是算法的最坏运行情况(N次找到)

所以该时间复杂度为


空间复杂度

空间复杂度用来决定算法所需要的额外空间,空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法


包装类

Java 中,由于基本类型不是继承自 Object ,为了在泛型代码中可以支持基本类型, Java 给每个基本类型都对应了一个包装类型。
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

1.装箱和卸箱

装箱:装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中

拆箱:拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中

 int a = 10;
        //显示转型
        Integer b = Integer.valueOf(a);
        
        //自动拆箱
        Integer b = a;

        
        Integer c = 10;
        //显示转型
        int d = c.intValue();

        //自动装箱
        int d = c;
我们再了看这样一个代码

 它的结果却是

为什么会这样呢,我们看一下valueoff的源代码

我们发现底层是一个cache的数组 ,[-128, 127]范围内的整型数据装入下标为[0,255]范围内


泛型

就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化

我们都知道Object是所有类的父类,于是我们用它来接受数据类型

我们发现数组array可以存放不同类型的值了,但是如果我们拿一个东西接受的话却发生了报错

 我们发现get方法所返回的值为父类Object,要拿整形或者字符串接受的话需要强制类型转换


1.泛型的定义

这样问题虽然解决了 但是很繁琐,于是就有了泛型!!!

 类名后的 <T> 代表占位符,表示当前类是一个泛型类

泛型类是不可以实例化一个对象的(会报错) 

将上面代码改为泛型类以后,就只可以输入对应的类型,存储数据是也不需要发生强转因为已经指定了类型,指定了什么类型就只能放什么类型(并且尖括号当中只能是引用类型不能是基本类型)


2.擦除机制

在编译的过程当中,将所有的T 替换为 Object 这种机制,我们称为: 擦除机制
Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息,
运行期间没有泛型的概念!!!!!!

3.泛型的上届

当我们在泛型类后面加一个extends(在这里是  扩展的意思),表示类型上边界,即必须是该边界或边界的子类,没有指定类型边界 E,可以视为 E extends Object

我们给T加入一个边界Numbers,于是String不是他的子类立马报错!

4.泛型方法 

有了泛型类,就会有泛型方法,与泛型类大同小异,泛型方法可以声明为 static 的,并且与普通的静态方法是一样的

方法限定符 < 类型形参列表 > 返回值类型 方法名称 ( 形参列表 ) { ... }

希望对你有帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitHub加载慢怎么解决

选了一个最简单的方法记录一下 一、GitHub为什么加载这么慢 简而言之就是&#xff0c;国内DNS默认解析到美国服务器&#xff08;慢&#xff09;&#xff0c;我们只要绕过DNS解析&#xff0c;直接访问韩国日本服务器&#xff08;快&#xff09;就可以解决访问缓慢的问题。 二、…

13.shell awk基础

13.shell awk基础 awk作用awk语法结构awk脚本结构awk工作原理awk内部变量awk格式输出awk模式匹配RegExp示例运算符匹配示例布尔运算符匹配示例运算符匹配示例 awk条件判断if判断 awk循环语句while循环for循环 awk是一种强大的文本处理工具&#xff0c;主要用于对文本和数据进行…

启动mysql 3.5时出现 MySql 服务正在启动 . MySql 服务无法启动。

有可能是端口冲突 netstat -ano | findstr :3306运行这段代码出现类似&#xff1a; 可以看到端口 3306 已经被进程 ID 为 6284 的进程占用。为了启动新的 MySQL 服务&#xff0c;我们需要停止这个进程或更改新服务的端口&#xff1a; 1、终止进程 taskkill /PID 6284 /F2、确…

大语言模型QA

Q:关于 Yi-9B 通过 input/output cosine 来分析模型,可能文档里没有把前提说明白。该指标确实存在你们提到的不同模型大小不可比的问题。所以我们比较的是同一个模型在不同训练阶段,以及 layer 深度相同的dense models 之间的比较。除了发现yi-6B/34B 随着训练 tokens 的增加…

在矩池云使用GLM-4的详细指南(无感连GitHubHuggingFace)

GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本&#xff0c;在多项测试中表现出超越已有同等规模开源模型的性能&#xff0c;它能兼顾多轮对话、网页浏览、代码执行、多语言、长文本推理等多种功能&#xff0c;性能更加强大。其多模态语言模型GLM-4V-9B在…

Autohotkey使用记录

文章目录 1. 安装1.1 autohotkey1.2 vscode需要安装的插件 3. 函数使用3.1 按键3.2 MouseMove 4. Bug分析4.1 A_TimeSincePriorHotkey 1. 安装 1.1 autohotkey 下载安装即可 1.2 vscode需要安装的插件 3. 函数使用 3.1 按键 各个按键的代词使用关键字搜索&#xff1a;Hotk…

antd Pagination分页组件自定义跳转文案、按钮的方法【配置组件自带api即可支持】

组件默认效果&#xff1a; 期望效果&#xff1a; 代码&#xff1a; <PaginationclassNamelist-pagerpageSize{10}current{params?.pageNo}responsivetotal{listData?.totalItem}showSizeChanger{false}showQuickJumper{{ goButton: <Button classNamego-page>确定…

一、时钟控制

时钟 STM32F4有五种时钟源 HSI 内部高速时钟LSI 内部低速时钟HSE 外部高速时钟LSE 外部低速时钟PLL 锁相环倍频输出 其中 HSI、HSE、PLL可驱动系统时钟 (SYSCLK)&#xff0c;对于每个时钟源来说&#xff0c;在未使用时都可单独打开或者关闭&#xff0c;以降低功耗。 HSE高速…

计算机信息安全技术课后习题答案

计算机信息安全技术课后习题答案 计算机信息安全技术&#xff08;第2版&#xff09;付永刚 部分习题答案 第一章 计算机信息安全技术概述 选择题 关于访问控制服务的描述中&#xff0c;正确的是&#xff08; A &#xff09; A. 可控制用户访问网络资源 B.可识别发送方的真实身…

多用户竞拍商城系统 挂售转卖竞拍商城系统源码 竞拍系统 竞拍系统开发定制 转拍闪拍系统 后端PHP+前端UNIAPP源码+教程

挂售转卖竞拍商城系统源码/竞拍系统/转拍闪拍系统/后端PHP前端UNIAPP源码 玩法简介 ①、后台可添加商品进行挂单 ②、后台设置场次以及场次开始时间 ③、用户抢单 ④、抢单以后可选择提货或者转售 ⑤、玩家寄售需按照后台设置百分比进行加价 ⑥、玩家寄售需支付手续费(余额支付…

u盘数据要在哪台电脑上恢复?u盘数据恢复后保存在哪里

在数字化时代&#xff0c;U盘已成为我们日常生活中不可或缺的数据存储设备。然而&#xff0c;由于各种原因&#xff0c;U盘中的数据可能会意外丢失&#xff0c;这时数据恢复就显得尤为重要。但是&#xff0c;很多人对于在哪台电脑上进行U盘数据恢复以及恢复后的数据应保存在哪里…

【Ardiuno】实验ESP32单片机完成搭建简易Web服务器功能(图文)

今天&#xff0c;小飞鱼继续来测试使用ESP32来实现简易的wifi无线web服务器功能。使用Ardiuno平台编辑器输入以下示例代码&#xff1a; #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h>const char* ssid &q…

【UE5|水文章】在UMG上显示帧率

参考视频&#xff1a; https://www.youtube.com/watch?vH_NdvImlI68 蓝图&#xff1a;

50.Python-web框架-Django中引入静态的bootstrap样式

目录 Bootstrap 官网 特性 下载 在线样例 Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 在django中使用bootstrap 新建static\bootstrap5目录&#xff0c;解压后的Bootstrap文件&#xff0c;拷贝项目里就好。 在template文件里引用css文…

全华人团队推出多模态大模型新基准,GPT-4o准确率仅为65.5%,所有模型最易犯感知错误

GPT-4o再次掀起多模态大模型的浪潮。 如果他们能以近似人类的熟练程度&#xff0c;在不同领域执行广泛的任务&#xff0c;这对许多领域带来革命性进展。 因而&#xff0c;构建一个全面的评估基准测试就显得格外重要。然而评估大型视觉语言模型能力的进程显著落后于它们自身的…

Windows7及以上系统中管理员权限与UAC虚拟化详解(附源码)

目录 1、管理员权限 2、UAC虚拟化 3、将程序配置为以管理员权限启动 4、判断程序有没有管理员权限 5、以管理员权限启动目标程序 6、开机自启动程序不能设置管理员权限 VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/art…

Samtec技术前沿 | 高达128 GT/s :全新概念验证型高速电缆解决方案性能

【摘要/前言】 即将发布的PCIe 7.0 规范旨在实现128 GT/s的数据传输速率。它延续了PCIe 每一代产品速度翻番的趋势。根据 PCI-SIG的说法&#xff0c;"PCIe 7.0 技术的目标是为人工智能/机器学习、数据中心、高性能计算、汽车和物联网等数据密集型市场提供可扩展的互连解决…

Docker笔记-Debian容器内搭建ssh服务

登陆容器之后修改密码&#xff1a; passwd 密码设置完成后安装openssh-server apt-get install openssh-server 修改端口号为50022并添加配置 vim /etc/ssh/sshd_config 修改成 Port 50022 PasswordAuthentication yes PermitRootLogin yes 启动 rootlinux:~# /etc/in…

实现AI口语练习的技术库

国内实现AI口语练习的第三方技术库比较多&#xff0c;以下是一些国内实现AI口语练习的第三方技术库。开发人员可以根据自己的需求选择合适的技术库进行开发。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 讯飞开放平台&#xff1a; …

2024世界人工智能大会“SAIL奖”发布

作为世界人工智能大会的最高奖项&#xff0c;SAIL 奖&#xff08;Super AI Leader&#xff0c;卓越人工智能引领者&#xff09;坚持“追求卓越、引领未来”的理念&#xff0c;评选和运营秉持“高端化、国际化、专业化、市场化、智能化”原则&#xff0c;从全球范围发掘在人工智…