对集合、复杂度以及泛型的认识

news/2024/5/4 11:44:22/文章来源:https://blog.csdn.net/crazy_xieyi/article/details/126745459

文章目录

  • 一、集合框架是什么?
  • 二、复杂度
    • 1.时间复杂度
    • 2.空间复杂度
  • 三、泛型


一、集合框架是什么?

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

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

二、复杂度

1.时间复杂度

2.空间复杂度

这里请参考之前写的一篇关于复杂度的博客:如何评价一个算法的好坏?-复杂度_crazy_xieyi的博客-CSDN博客大O表示法来描述复杂度,需要忽略常数、系数和低阶。O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)。用尽量小的存储空间,用尽量少的执行步骤。第64个斐波那契数(n=64),用O(n)计算大约耗时6.4*10^(-8)秒,用O(2^n)计算大约耗时584.94年。...https://blog.csdn.net/crazy_xieyi/article/details/126062123?spm=1001.2014.3001.5501

这里看一个非常经典的题目:

// 计算斐波那契递归的复杂度?
int fifibonacci(int N) {
return N < 2 ? N : fifibonacci(N-1)+fifibonacci(N-2);
}

1.时间复杂度

这里就要分析递归了多少次。

 计算执行次数,为等比数列求和:2^0+2^1+2^2+......+2^(n-1)=2^n-1

所以时间复杂度为:O(2^N)

 2.空间复杂度

在计算空间复杂度的时候,需要注意一点就是:当一条链路递归完成之后,返回来的时候,其所占的空间就被释放了,所以空间复杂度以最长链路为准,及空间复杂度为:O(N)

三、泛型

泛型是在JDK1.5引入的新的语法,通俗讲,泛型就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。在编译的时候会进行类型的检查和转换
小技巧:设置泛型:shift + F6
语法
泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

注意:泛型只能接受类,所有的基本数据类型必须使用包装类!

当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写。

MyArray<Integer> list = new MyArray<>(); 

擦除机制

在编译的时候会进行类型检查,最后在编译完成的字节码文件中,都变成了Object。

泛型的上界

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

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

只接受 Number 的子类型作为 E 的类型实参。此时E是 Number的子类或Number本身,因为此时引入了泛型的上界,那么在擦除之后,为Number。

注意: 没有指定类型边界 E,可以视为 E extends Object 

如果涉及到元素的比较,那么E必须是实现了Comparable接口的。

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

 通配符

? 用于在泛型的使用,即为通配符。
一个例子:
public class TestDemo {
   public static void main(String[] args) {
      Message<Integer> message = new Message() ;
      message.setMessage(55);
      fun(message);
   }
   // 此时使用通配符"?"描述的是它可以接收任意类型,但是由于不确定类型,所以无法修改
   public static void fun(Message<?> temp){
      //temp.setMessage(100); 无法修改!
      System.out.println(temp.getMessage());
   }
}

1.通配符上界

? extends 类:设置泛型上界

<? extends 上界>
例子:<? extends Number>//可以传入的实参类型是Number或者Number的子类

 通配符的上界,不能进行写入数据(不确定具体类型),只能进行读取数据(因为一定可以用Number接收)

2.通配符下界

<? super 下界>
例子:<? super Integer>//代表 可以传入的实参的类型是Integer或者Integer的父类类型

相反,通配符的下界,不能进行读取数据(因为无法知道取出的数据类型具体是什么),只能写入数据(此时可以放入Integer的父类)

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

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

相关文章

linux使用nginx-gridfs实现文件服务

一&#xff1a;nginx第三方模块用什么命令&#xff0c;--addmongodb 二&#xff1a;怎么样装mongodb 三&#xff1a;怎么上传一个图片 四&#xff1a;怎么样去访问这个图片 三方模块&#xff1b;它不是nginx的&#xff0c;就是在源码包编译nginx的时候&#xff0c;把第三方…

IJCAI 2022 | 使用陈述句进行视觉问答的Prompt Tuning

©PaperWeekly 原创 作者 | 武祥宇单位 | 南京理工大学博士生研究方向 | 多模态学习论文标题&#xff1a;Declaration-based Prompt Tuning for Visual Question Answering收录会议&#xff1a;IJCAI 2022论文链接&#xff1a;https://arxiv.org/abs/2205.02456代码链接&a…

python基于django的高校教师科研成果管理系统

长期以来&#xff0c;院校的科研水平和科研规模一直反映着我国科研技术水平技术含量&#xff0c;随着现代科技的日益发展&#xff0c;各个院校的科研活动和科研能力已成为反映高校综合实力重要指标&#xff0c;而随着高校专业类别的增加&#xff0c;教师科研领域范围扩大&#…

GreenPlum列存解密

GreenPlum支持列式存储。叫做AOCO表。那么AOCO列存是如何管理列存文件&#xff1f;如何实现MVCC&#xff1f;是否支持索引&#xff0c;若支持如何实现的呢&#xff1f;下面我们介绍下AOCO的实现机制。1、存储结构如上图所示&#xff0c;列存每一列单独存储一个文件。上面一个表…

文件管理命令和find命令

文件管理命令和find命令 stat命令 查看文件状态 每个文件有三个时间戳: access time访问时间,atime&#xff0c;读取文件内容modify time修性时间, mtime&#xff0c;改变文件内容change time改变时间,ctime&#xff0c;元数据发生改变场景是:上传了WebShell&#xff0c;避…

MySQL数据误删恢复操作

目录记录一次不小心删除生产数据偷偷恢复解决方案 模拟数据删除 记录下操作时间&#xff0c;2022-09-21下午5点左右 通过show variables like %datadir%查看binlog存放目录目录 通过show master status;查看当前binlog的记录文件 查看mysqlbinlog工具目录&#xff0c;需要通过此…

ANYCUBIC Photon Mono 4K光固化打印机快速上手(多次试错的经验积累)

变更记录 记录每次修订的内容&#xff0c;方便追溯。 版本号作者修订内容发布日期1.1Zeeland优化打印机的最佳模式内容2022年9月21日 23:41:581.0Zeeland完善基本文档2022年2月14日 19:33:52 1. 简介 笔者前期使用ANYCUBIC Photon Mono 4K光固化打印机失败了很多次&#xff0c…

Vue3——压缩字体font-spider,完美解决字体压缩后会出现字体消失现象

Vue项目打包字体完整版教程 如果打包的时候字体太大&#xff0c;可以选择压缩字体进行处理 打包前&#xff1a; 打包后: 可以看到&#xff0c;区别还是很明显的&#xff0c;下面是使用方法 这里可以使用字蛛font-spider来进行压缩 字蛛font-spider npm install font-spide…

C 语言避坑指南

文章目录&#x1f449;引言&#x1f48e;C 避坑指南一、基础|基本常识类1 运算符类型2 占位符|格式化问题3 输入输出问题二、错题 | 程序语句类三、进阶 | 指针与函数四、进阶 | 结构体及宏定义&#x1f449;引言&#x1f48e; 学习的最大理由是想摆脱平庸&#xff0c;早一天就…

linux 中 date +%s 获取1970年以来的秒数

001、(base) [root@PC1 home]# date +%s 1663810406 (base) [root@PC1 home]# date +%s 1663810410 date +%s //从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)参考:https://zhidao.baidu.com/question/490735500497375812.html

EasyCVR接入宇视设备后通道显示的是目录,是什么原因?

EasyCVR平台基于云边端一体化架构,充分发挥视频接入、汇聚与管理、分发、智能分析、数据共享等能力,不断在多样化场景中落地应用,不仅涵盖传统行业的安防视频监控,还涉及到景区旅游、校园教育、社区、楼宇、智慧农业等领域的应用。感兴趣的用户可以前往演示平台进行体验或部…

Docker安装Jenkins

Docker安装Jenkins 准备工作 下载Jenkins镜像 docker pull jenkins/jenkins开始安装 创建需要挂载的本地文件夹 mkdir -p 路径/jenkens chmod 777 路径/jenkens创建并启动Container docker run -d -p 8080:8080 --name=jenkins -v 路径/jenkens/:/var/jenkins_home jenkins/jen…

vue 中利用js完成等比例缩放图片和点位跟着移动

需要等比例缩放的内容 html <div class="boxImg" ref="cont" style="position: absolute; top: 0; left: 0"><!-- 这里放上需要等比例缩放的内容 --> </div> 在vue中 methods 中写 methods: {updateScaleRatio(ImgObj, ma…

linux - 搭建部署ftp服务器

ftp 服务&#xff1a; 实现ftp功能的一个服务&#xff0c;安装vsftpd软件搭建一台ftp服务器 ftp协议&#xff1a; 文件传输协议 &#xff08;file transfer protocol&#xff09;&#xff0c;在不同的机器之间实现文件传输功能&#xff0c; 例如 视频文件下载&#xff0c;…

前端之html和css(2)

目录 一&#xff0c;html 1&#xff0c;文本相关标签 2&#xff0c;列表标签 3&#xff0c;图片标签 4&#xff0c;超链接 5&#xff0c;表格标签 table 6&#xff0c;表单 form 7&#xff0c;分区标签 二&#xff0c;css层叠样式表 1&#xff0c;css样式代码的三种引入…

【职场必备知识】一文搞懂五险一金(打工人必备)

社保局电话&#xff1a;12333五险一金非常重要的是&#xff1a;缴纳基数和缴纳比例&#xff01; 文章目录五险一金是什么五险一金缴纳比例养老保险养老保险构成退休年龄医疗保险生育险工伤保险失业险公积金补充&#xff1a;常见问题“五险二金”多出来的“一金”是什么&#xf…

Firewall Analyzer防火墙管理

企业防火墙管理 典型的企业网络安全基础设施包括传统防火墙、下一代防火墙 (NGFW)、虚拟专用网络 (VPN) 和来自多个供应商的代理服务器。网络安全管理&#xff0c;特别是防火墙安全管理尤其棘手&#xff0c;因为每个供应商的能力和技术差异很大。然而&#xff0c;市场上有许多…

kubernetes-Service服务发现

目录 一、Service基本概念 1、Pod的特征 1. Pod等资源的概念 2.解决pod进行如此多变化时的解决方案 2、Service 1. Kubernetes Service 定义了这样一种抽象&#xff1a; 2. Service的实现类型 3、Service模型 4、Endpoint Controller 5、Kube-proxy iptables 6、Kube…

ESP8266-Arduino编程实例-OLED-SSD1306(I2C)显示屏驱动

OLED-SSD1306(I2C)显示屏驱动 1、OLED介绍 OLED显示屏是指有机电激发光二极管(OrganicLight-EmittingDiode,OLED)由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一…