泛型,数据结构,集合

文章目录

  • 泛型
      • 介绍
      • 解决问题
      • 好处
      • 使用
      • 通配符
        • 泛型的下限
        • 泛型的上限
  • 数据结构
      • 定义
      • 常见的数据结构
        • 栈(先进后出)
        • 队列(先进先出)
        • 数组结构
        • 链表结构
        • 哈希表结构
  • 集合
    • List集合
      • 特点
      • 特有方法
      • 子类及其底层数据结构
      • LinkedList集合
    • Set集合
      • 特点
      • 没有特有方法
      • 子类及其底层数据结构
      • LinkedHashSet集合

泛型

介绍

在Java语言中,是一种类型参数,可以设置存储数据的类型

解决问题

在创建对象时,明确了集合中所存储元素的类型(限定类型)

  • 泛型是使用在代码编写时期的技术方法(编译期技术)
  • 泛型在程序运行时,就会被擦除

好处

  1. 在编译时就对类型做判断,避免不必要的类型转换操作
    1. 元素类型->Object类型
  2. 精简代码,不用调用特有方法来转型,避免发生错误
    1. Object类型->需要的类型

使用

  • 泛型类
public class 类名<T>{}//当不确定类中的成员变量使用什么类型时,可以用泛型表示
public class 泛型类<T>{private T 变量;
}//在创建泛型类对象时,明确类型
泛型类<String> 对象 = new 泛型类<>();
//泛型类中成员变量的类型为:String
  • 泛型接口
public interface 接口名<A>{}//当不确定接口中某个方法参数使用什么类型,或者方法的返回值使用什么类型时,可以用泛型表示
public interface 泛型接口<A>{public void method(A a);
}//情况1:在子类编写时,指定接口上泛型的具体类型
public class 子类 implements 泛型接口<String>{public void method(String a){}
}//情况2:在子类编写时,没有指定接口上的泛型。意味着:子类也使用和接口相同的泛型(子类:泛型类)
public class 子类<A> implements 泛型接口<A>{public void method(A a){}
}
子类<String> 对象 = new 子类<>();
//创建子类对象时,明确了泛型的类型
  • 泛型方法(非泛型类)
修饰符 <泛型> 返回值类型 方法名(泛型 参数){//方法体
}//当前类没有声明泛型类,但该类中的方法参数或方法返回值不确定类型时:使用泛型方法
public <T> void method(T param){}
//当调用该方法时,向方法中传递参数的类型,就是泛型的类型

通配符

? 表示任意类型
通常在开发中,?是和泛型的上下限一起使用

泛型的下限

指定泛型中的最小类型
<? super 最小类型>

泛型的上限

指定泛型中的最大类型
<? extends 最大类型>
:集合中泛型不支持多态

数据结构

定义

是一个存储数据的排列方式

常见的数据结构

栈(先进后出)

Snipaste_2024-03-28_18-23-48.png

队列(先进先出)

Snipaste_2024-03-28_18-25-39.png

数组结构

定义:数组在内存中是一块连续存储数据的空间
特点:查询快,增删慢
ArrayList底层就是使用数组结构
Snipaste_2024-03-28_19-27-58.png

链表结构

在内存中是使用节点存储数据
节点:数据+地址
特点:有头有尾
分类

  • 单向链表:只能从头到尾
  • 双向链表:可以从头到尾,也可以从尾到头(提高查询效率)

Snipaste_2024-03-28_20-50-31.png
代表集合:LinkedList

哈希表结构

底层:使用大小为16的数组+链表组成的存储方式
存储数据的方式:就是根据对象的地址或者属性结合哈希算法算出int类型的哈希值 Object.hashCode()

  • 判断:计算出的存储位置上是否有元素存在
    • 没有元素存在,直接存储
    • 有元素存在 拿要存储的元素和已经存储的元素进行比较 Object.equals()
      • 相同:属于重复元素,不存储
      • 不相同:再次拿当前存储空间作为算法因子,进行哈希算法,计算新的存储空间;如何重复上述操作

哈希值的特点

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,不同对象的哈希值有可能相同(比如:“abc”,“cba”,“bca”)

优化:从JDK1.8开始,使用数组+链表/红黑树(当链表的长度>8时,自动把链表转换为红黑树)

集合

体系划分

  • Collection(接口)
  • Map(接口)

java.util.Collection集合:是一个接口,无法实例化

  • java.util.List集合(接口)
    • 常用子类:ArrayList,LinkedList
  • java.util.Set集合(接口)
    • 常用子类:HashSet,LinkedHashSet,TreeSet

List集合

特点

  • 带有索引
  • 存储元素的顺序和获取元素的顺序一样(存取有序)
  • 可以存储重复元素

特有方法

Snipaste_2024-03-28_19-43-39.png

子类及其底层数据结构

  1. ArrayList:数组结构
  2. LinkedList:双向链表
  3. Vector:数组结构

LinkedList集合

底层结构:双向链表
双向链表:每个节点有三个部分的数据,一个是保存元素数据,一个是保存前一个节点的地址,还有一个是保存后一个节点的地址。查询效率比单向链表高。
特有方法
Snipaste_2024-03-28_19-50-32.png

Set集合

特点

  • 元素没有索引
  • 存取元素不保证顺序
  • 不能存储重复元素

没有特有方法

方法都来自Collection集合

子类及其底层数据结构

  • HashSet:哈希表结构
  • LinkedHsahSet:链表+哈希表结构
  • TreeSet:红黑树

LinkedHashSet集合

底层结构:哈希表+链表结构
哈希表保证无重复元素
链表保证存取元素顺序有序

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

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

相关文章

vscode使用sftp上传

1.用vscode打开项目 2.安装一下这个sftp 3.使用快捷键 ctrlshiftP 打开指令窗口&#xff0c;输入 sftp:config&#xff0c;选中回车&#xff0c;在当前目录中会自动生成 .vscode 文件夹及 sftp.json 4.修改sftp.json文件配置&#xff0c;改成以下&#xff08;默认的参数可能上传…

AJAX-项目优化(目录、基地址、token、请求拦截器)

目录管理 基地址存储 在utils/request.js配置axios请求基地址 作用&#xff1a;提取公共前缀地址&#xff0c;配置后axios请求时都会baseURLurl 填写API的公共前缀后&#xff0c;将js文件导入到html文件中 <script src"../../utils/request.js"></script&…

SpringBoot单元测试剖析

SpringBoot作为一种流行的Java框架&#xff0c;其单元测试的重要性不言而喻。在这篇博客中&#xff0c;我们将深入剖析SpringBoot单元测试的底层原理。 单元测试的概念 单元测试是软件开发过程中的一个重要环节&#xff0c;它是对软件中的最小可测试单元进行检查和验证。对于…

AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

✨ 1: AniPortrait 腾讯开源&#xff1a;根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架&#xff0c;专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频&#xff0c;也可以用来实现面部的再现&#xff08;Face reenactment&am…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写&#xff0c;发表于2002年。研究团队通过第一性原理计算&#xff0c;探讨了位错对氮化镓&#xff08;GaN&#xff09;电子能量损失谱&#xff08;EEL&#xff09;…

内网穿透_ICMP_icmpsh

目录 一、ICMP协议详解 二、ICMP隧道 (一) 为什么会使用ICMP (二) 实验环境 (三) 操作流程 1. 下载icmpsh 2. 下载并安装依赖 3. 关闭本地icmp响应 4. 攻击机启动服务端开始监听 5. 靶机启动工具客户端 6. 攻击机接受到靶机传来的数据 三、郑重声明 一、ICMP协议详…

EasyExcel模板填充以及填充多个sheet

# 一 需求&#xff1a; 有一个需求是根据不同维度去查询数据然后汇总&#xff0c;最后一行数据为合计数据&#xff0c;并且总计那行要合并单元格 # 二 思路 因为有7个维度&#xff0c;不想去写7个查询&#xff0c;然后分析之后发现只有汇总条件是可变的&#xff0c;其它数据一样…

C#WPF控件TextBlock详解

本文讲解WPF控件TextBlock。 目录 定义 常用属性 实例 如何实现自动换行? 如何强制回车换行?

如何系统的学习 C#

第一阶段&#xff1a;环境搭建与基础知识 1.1 安装开发环境 下载并安装Visual Studio或Visual Studio Code。若选用Visual Studio Code&#xff0c;记得安装C#扩展插件。 1.2 C#语言概述 了解C#的发展历程、特点以及应用场景。学习C#的基本语法规范&#xff0c;例如语句结尾…

实时数据库测试-汇编小程序

实时数据库测试-汇编小程序。 hd.asm .686 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc …

C# 反射的使用及场景

1&#xff0c;使用反映将一个对象的同名属性赋值给另一个对象 2, DataTable 转换成一个实体 3&#xff0c;使用反射动态执行方法 4,根据属性信息来执行对应的方法 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using…

项目启动时自动订阅配置中指定的MQ主题,并将接收到的消息存储在Redis中,提供了一个HTTP接口来查询存储的消息

涵盖从application.yml配置&#xff0c;通过MQ订阅消息&#xff0c;将消息存放到Redis&#xff0c;最后通过HTTP接口提供消息查询的整个流程&#xff0c;我们将分步进行。 Step 1: application.yml配置 spring:profiles:active: devredis:host: localhostport: 6379database:…

Spring用到了哪些设计模式?

目录 Spring 框架中⽤到了哪些设计模式&#xff1f;工厂模式单例模式1.饿汉式&#xff0c;线程安全2.懒汉式&#xff0c;线程不安全3.懒汉式&#xff0c;线程安全4.双重检查锁&#xff08;DCL&#xff0c; 即 double-checked locking&#xff09;5.静态内部类6.枚举单例 代理模…

【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning

注 由于其公司的保密政策&#xff0c;本文没有公开源代码&#xff0c;数据是公开的。 文章目录 摘要一、介绍二、背景和动机2.1、日志语句生成2.2、大语言模型2.3、上下文学习&#xff08;In-Context Learning&#xff0c;ICL) 三、UNILOG3.1、模型骨干3.2、提示策略3.2.1、提…

3d金属模型灯怎么安装---模大狮模型网

在3D场景中&#xff0c;添加灯光是非常重要的步骤&#xff0c;可以提升场景的氛围和逼真度。特别是对于金属材质的模型&#xff0c;合适的灯光设置能够突出其质感和反射效果。下面将介绍如何在3D软件中安装金属模型灯&#xff0c;并分为以下四个分类进行详细说明。 一、选择合适…

简述机器视觉技术在自动化行业中的典型应用

如今&#xff0c;自动化技术在我国发展迅猛&#xff0c;人们对于机器视觉的认识更加深刻&#xff0c;对于它的看法也发生了很大的转变。机器视觉系统提高了生产的自动化程度&#xff0c;让不适合人工作业的危险工作环境变成了可能&#xff0c;让大批量、持续生产变成了现实&…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

【InternLM 实战营第二期笔记】书生·浦语大模型全链路开源体系及InternLM2技术报告笔记

大模型 大模型成为发展通用人工智能的重要途径 专用模型&#xff1a;针对特定任务&#xff0c;一个模型解决一个问题 通用大模型&#xff1a;一个模型应对多种任务、多种模态 书生浦语大模型开源历程 2023.6.7&#xff1a;InternLM千亿参数语言大模型发布 2023.7.6&#…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 2.1 安装HxD HxD下载链接&#xff1a;https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 2.2 找到bmp图像的图片点阵数据起始地址&#xff0c;原理和例子…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …