当前位置: 首页 > news >正文

泛型与Map接口

Java学习之道


泛型

泛型这种参数类型可以用在类、方法和接口中,分别被称为泛型类,泛型方法,泛型接口

  • 参数化类型:将类型由原来的具体的类型参数化,在使用/调用时传入具体的类型
  • JDK5引入特性
  • 提供了安全检测机制,编译时就能检测
  • 避免了强制类型转换

泛型类

在这里插入图片描述

格式
在这里插入图片描述
测试类
在这里插入图片描述

在上面会遇到就是每次定义都需要在<—>写一次对应类型,为此有了以下提升,写一次即可,来看泛型方法

泛型方法

在这里插入图片描述
格式:
在这里插入图片描述
测试类
在这里插入图片描述

泛型接口

在这里插入图片描述
格式
在这里插入图片描述
接口实现类
在这里插入图片描述
测试类
在这里插入图片描述

同样,以泛型方法的方式去编写代码也可以<不用因为类型不同每次new对象>

接口类
在这里插入图片描述
接口实现类
在这里插入图片描述
测试类
在这里插入图片描述

类型通配符

为了表示各种泛型List的父类,可以使用类型通配符

  • 类型通配符:<?> List<?>:表示元素类型未知的List,它的元素可以匹配任何类型
    带通配符的List仅表示他是各种泛型List的父类,并不能把元素添加进入
  • 如果我们不希望List<?>是任何泛型List的父类,只希望它代表某一类泛型,可以使用类型通配符上限
    类型通配符上限:<? extends 类型>
    List<? extends Number>:表示的类型是Number或者其子类型
  • 类型通配符下限
    格式:<? super 类型>
    List<? super Number>:它表示类型是Number或者其父类型

在这里插入图片描述

可变参数

可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的

样例:

#格式:修饰符 返回值类型 方法名(数据类型...变量名){}
public static int sum(int...a){}

简单的几个数字求和,但是没办法确定到底多少个,也可以用泛型,对应数字就可以看成一个数组

可变参数注意事项:

  • 这里的变量其实是一个数组
  • 如果方法有多个参数,包含可变参数,可变参数要放在最后

在这里插入图片描述

可变参数使用

Arrays工具类中有一个静态方法

asList返回的集合不能做增删操作可以修改操作

#返回由指定数组支持的固定大小的列表
public static<T> List<T> asList(T...a)

在这里插入图片描述

List接口中有一个静态方法

返回的集合不能做增删改操作

//返回包含任意数量元素的不可变列表
public static<E> List<E> of(E...elements) 

在这里插入图片描述

set接口中有一个静态方法

  • 在给元素的时候不能给重复的元素
  • 返回的集合不能做增删操作,没有修改的方法
//返回一个包含任意数量元素的不可变集合
public static <E> Set<E> of(E...elements)

在这里插入图片描述

Map集合【接口】

Map集合概述和使用

Map集合概述

  • Interface Map<K,V> K:键的类型; V:值的类型
  • 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
  • 举例:学生的学号和姓名
    itheima001 林青霞
    itheima002 张曼玉
    itheima003 王祖贤

创建Map集合的对象

  • 多态的方式
  • 具体的实现类HashMap

Map添加元素方法(put)

Main
在这里插入图片描述
Terminal
在这里插入图片描述

如果元素添加键值跟相同,则后者会覆盖前者

在这里插入图片描述

Map集合的基本功能

刚才上面已经介绍了一种功能,添加元素put

//添加元素
V put(K key,V value) 
//根据键删除键值对元素
V remove(Object key)
//移除所有键值对元素
void clear()
//判断集合是否包含指定键
boolean containsKey(Object key)
//判断集合是否包含指定元素
boolean containsValue(Object value)
//判断集合是否为空
boolean isEmpty()
//集合长度,也就是几何中键值对的个数
int size()

代码展示:
在这里插入图片描述
Terminal
在这里插入图片描述

Map集合获取功能

在元素put进入Map中之后怎么获取呢,如下

//按键值获取
V get(Object key)
//获取所有键的集合
Set<K> keySet()
//获取所有值的集合
Collection<V> values()
//获取所有键值对对象的集合
Set<Map.Entry<K,V>>entrySet()

Map遍历一

案例

在这里插入图片描述
在这里插入图片描述
Terminal
在这里插入图片描述

Map遍历二

前面的内容都是单纯元素之间的遍历,后面我们尝试对象的Map数组存入并遍历,冲压

案例:
在这里插入图片描述
Terminal
在这里插入图片描述

这里通过两种方法:一种是通过键找值,另一种是通过键值对对象找键和值

案例

ArrayList集合存储HashMap元素并遍历

在这里插入图片描述
代码展示
在这里插入图片描述
Terminal
在这里插入图片描述

案例2:HashMap集合存储ArrayList元素并遍历

在这里插入图片描述
代码展示
在这里插入图片描述
Terminal
在这里插入图片描述

案例3:键盘录入一串字符,然后输出每个字符出现的次数

代码展示
在这里插入图片描述
在这里插入图片描述
Terminal
在这里插入图片描述

在这里不难看出,所输出的内容并非按照顺序排列,所以我们应该使用TreeMap

在这里插入图片描述
Terminal
在这里插入图片描述

总结

对于泛型与Map接口的使用就说到这,还需要多练习

相关文章:

泛型与Map接口

Java学习之道 泛型 泛型这种参数类型可以用在类、方法和接口中&#xff0c;分别被称为泛型类&#xff0c;泛型方法&#xff0c;泛型接口 参数化类型&#xff1a;将类型由原来的具体的类型参数化&#xff0c;在使用/调用时传入具体的类型JDK5引入特性提供了安全检测机制&#xf…...

Unity Bug记录本

//个人记录&#xff0c;持续更新 1、将此代码挂载到空脚本上&#xff1a; bool flag (object)GetComponent<Camera>() null; bool flag1 (object)GetComponent<Text>() null; Debug.Log(flag"::"flag1); //输出结果&#xff1a;False::True bool…...

B. The Number of Products)厉害

You are given a sequence a1,a2,…,ana1,a2,…,an consisting of nn non-zero integers (i.e. ai≠0ai≠0). You have to calculate two following values: the number of pairs of indices (l,r)(l,r) (l≤r)(l≤r) such that al⋅al1…ar−1⋅aral⋅al1…ar−1⋅ar is neg…...

一起Talk Android吧(第五百一十二回:自定义Dialog)

文章目录整体思路实现方法第一步第二步第三步第四步各位看官们大家好&#xff0c;上一回中咱们说的例子是"自定义Dialog主题",这一回中咱们说的例子是" 自定义Dialog"。闲话休提&#xff0c;言归正转&#xff0c; 让我们一起Talk Android吧&#xff01;整体…...

GinVueAdmin源码分析3-整合MySQL

目录文件结构数据库准备配置文件处理config.godb_list.gogorm_mysql.gosystem.go初始化数据库gorm.gogorm_mysql.go开始初始化测试数据库定义实体类 Userserviceapi开始测试&#xff01;文件结构 本文章将使用到上一节创建的 CommonService 接口&#xff0c;用于测试连接数据库…...

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——MapReduce开发总结

在编写MapReduce程序时&#xff0c;需要考虑如下几个方面&#xff1a; 1、输入数据接口&#xff1a;InputFormat 默认使用的实现类是&#xff1a;TextInputFormatTextInputFormat的功能逻辑是&#xff1a;一次读一行文本&#xff0c;然后将该行的起始偏移量作为key&#xff0…...

requests---(4)发送post请求完成登录

前段时间写过一个通过cookies完成登录&#xff0c;今天我们写一篇通过post发送请求完成登录豆瓣网 模拟登录 1、首先找到豆瓣网的登录接口 打开豆瓣网站的登录接口&#xff0c;请求错误的账号密码&#xff0c;通过F12或者抓包工具找到登录接口 通过F12抓包获取到请求登录接口…...

Python抓取数据具体流程

之前看了一段有关爬虫的网课深有启发&#xff0c;于是自己也尝试着如如何过去爬虫百科“python”词条等相关页面的整个过程记录下来&#xff0c;方便后期其他人一起来学习。 抓取策略 确定目标&#xff1a;重要的是先确定需要抓取的网站具体的那些部分&#xff0c;下面实例是…...

【Python学习笔记】第二十四节 Python 正则表达式

一、正则表达式简介正则表达式&#xff08;regular expression&#xff09;是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。正则表达式是对字符串&#xff08;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特…...

数字逻辑基础:原码、反码、补码

时间紧、不理解可以只看这里的结论 正数的原码、反码、补码相同。等于真值对应的机器码。 负数的原码等于机器码&#xff0c;反码为原码的符号位不变&#xff0c;其余各位按位取反。补码为反码1。 三种码的出现是为了解决计算问题并简化电路结构。 在原码和反码中&#xff0c;存…...

有限差分法-差商公式及其Matlab实现

2.1 有限差分法 有限差分法 (finite difference method)是一种数值求解偏微分方程的方法,它将偏微分方程中的连续变量离散化为有限个点上的函数值,然后利用差分逼近导数,从而得到一个差分方程组。通过求解差分方程组,可以得到原偏微分方程的数值解。 有限差分法是一种历史…...

高校就业信息管理系统

1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2程序系统的结构 3登录模块设计说明一 3.1程序描述 3.2功能 3.3性能 3.4输人项 3.5输出项 3.6算法 3.7流程逻辑 3.8接口 3.10注释设计 3.11限制条件 3.12测试计划 3.13尚未解决的问题 4注册模块设计说明 4.…...

【Java|golang】2373. 矩阵中的局部最大值

给你一个大小为 n x n 的整数矩阵 grid 。 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal &#xff0c;并满足&#xff1a; maxLocal[i][j] 等于 grid 中以 i 1 行和 j 1 列为中心的 3 x 3 矩阵中的 最大值 。 换句话说&#xff0c;我们希望找出 grid 中每个 3 x …...

根据指定函数对DataFrame中各元素进行计算

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】根据指定函数对DataFrame中各元素进行计算以下错误的一项是?import numpy as npimport pandas as pdmyDict{A:[1,2],B:[3,4]}myDfpd.DataFrame(myDict)print(【显示】myDf)print(myDf)print(【…...

【蓝桥杯集训·每日一题】AcWing 3502. 不同路径数

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴一、题目 1、原题链接 3502. 不同路径数 2、题目描述 给定一个 nm 的二维矩阵&#xff0c;其中的每个元素都是一个 [1,9] 之间的正整数。 从矩阵中的任意位置出发&#xf…...

Java - 数据结构,二叉树

一、什么是树 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 1、有…...

模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

【案例11-3】 模拟QQ登录 【案例介绍】 1.案例描述 QQ是现实生活中常用的聊天工具&#xff0c;QQ登录界面看似小巧、简单&#xff0c;但其中涉及的内容却很多&#xff0c;对于初学者练习Java Swing工具的使用非常合适。本案例要求使用所学的Java Swing知识&#xff0c;模拟实…...

【壹】嵌入式系统硬件基础

随手拍拍&#x1f481;‍♂️&#x1f4f7; 日期: 2023.2.28 地点: 杭州 介绍: 日子像旋转毒马&#x1f40e;&#xff0c;在脑海里转不停&#x1f92f; &#x1f332;&#x1f332;&#x1f332;&#x1f332;&#x1f332; 往期回顾 &#x1f332;&#x1f332;&#x1f332…...

当参数调优无法解决kafka消息积压时可以这么做

今天的议题是&#xff1a;如何快速处理kafka的消息积压 通常的做法有以下几种&#xff1a; 增加消费者数增加 topic 的分区数&#xff0c;从而进一步增加消费者数调整消费者参数&#xff0c;如max.poll.records增加硬件资源 常规手段不是本文的讨论重点或者当上面的手段已经使…...

Java线程池源码分析

Java 线程池的使用&#xff0c;是面试必问的。下面我们来从使用到源码整理一下。 1、构造线程池 通过Executors来构造线程池 1、构造一个固定线程数目的线程池&#xff0c;配置的corePoolSize与maximumPoolSize大小相同&#xff0c; 同时使用了一个无界LinkedBlockingQueue存…...

【RAG】【query_engine01】多文档自动检索分析

1. 案例目标 本案例展示了如何实现结构化分层检索(Structured Hierarchical Retrieval)&#xff0c;这是一种处理多文档RAG(检索增强生成)的高级架构。该架构能够根据用户查询动态选择相关文档&#xff0c;然后再从这些文档中选择相关内容。 主要目标包括&#xff1a; 演示如…...

开源AI投资情报工具MacroClaw:从数据抓取到智能分析的完整实践

1. 项目概述&#xff1a;一个实时投资情报的AI智能体如果你和我一样&#xff0c;每天需要花大量时间在财经新闻、大宗商品价格和地缘政治动态上&#xff0c;试图从海量信息中提炼出对投资决策有用的信号&#xff0c;那你一定明白这有多耗时耗力。传统的资讯平台要么信息滞后&am…...

一句话就能“劫持”你的AI?DZS 分层式自适应提示词注入攻击的防御机制框架 (HAA)来了!

本文所展示的提示词技术已在Research square 发表论文预印本。DOI&#xff1a;https://doi.org/10.21203/rs.3.rs-9653510/v1 作者“抖知书&#xff08;douzhishu&#xff09;&#xff0c;涉及到相关测试数据是本人自行测试的&#xff0c;并未通过多专家评审&#xff0c;所以仅…...

免费LLM API资源全攻略:从开源模型到工程化实践

1. 项目概述&#xff1a;一个汇集免费LLM API资源的宝藏仓库 如果你正在开发一个需要集成大语言模型&#xff08;LLM&#xff09;的应用&#xff0c;无论是聊天机器人、内容生成工具&#xff0c;还是数据分析助手&#xff0c;第一个拦路虎往往就是API成本。OpenAI、Anthropic这…...

告别云服务器:手把手教你用QEMU在Ubuntu 18.04上搭建专属内核调试环境

从零构建QEMU内核调试环境&#xff1a;Ubuntu 18.04下的UEFI开发实战手册 当深夜的调试灯亮起&#xff0c;你是否还在为云服务器高昂的费用和网络延迟苦恼&#xff1f;本文将带你用一台普通Ubuntu机器&#xff0c;打造媲美物理机的内核开发环境。不同于常规教程&#xff0c;我…...

learn claude code S11 自主 Agent 详解笔记

S11 自主 Agent 详解笔记基于 s11_autonomous_agents.py 源码逐行分析&#xff0c;配合 s11-autonomous-agents.md 设计思路。一、问题&#xff1a;队友需要有人持续指派任务 s09-s10 的 teammate 有一个尴尬的空白期&#xff1a;完成当前任务后进入 idle&#xff0c;然后呢&am…...

(B站TinyML教程学习笔记)C8 edge impulse 快速入门+C9 数据提取+C10 运动数据的特征提取

0:06 - 1:00 为什么使用 Edge Impulse 常见机器学习开发方式 传统机器学习通常会使用&#xff1a; TensorFlowScikit-learn 这些框架功能强大&#xff0c;但&#xff1a; 学习成本高需要写大量代码对嵌入式开发者不太友好 Edge Impulse 的作用 Edge Impulse 核心特点&am…...

AI系统合规性故障模式解析:从公平性、隐私到可解释性的工程实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“AI-Compliance-Failure-Patterns”。光看名字&#xff0c;你大概能猜到它和AI的合规性有关&#xff0c;但具体是做什么的&#xff0c;可能还有点模糊。简单来说&#xff0c;这个项目就像一本针对AI系…...

如何让老旧安卓电视流畅播放直播节目?mytv-android原生应用解决方案

如何让老旧安卓电视流畅播放直播节目&#xff1f;mytv-android原生应用解决方案 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否还在为家中那台开机需要5分钟、看直播卡顿的老旧安卓…...

从CuteCom到minicom:手把手教你搭建Ubuntu嵌入式开发串口调试环境(附I.MX6ULL实战)

从CuteCom到minicom&#xff1a;Ubuntu嵌入式开发串口调试全攻略 嵌入式开发中&#xff0c;串口调试如同工程师的"听诊器"。当你在Ubuntu系统上面对I.MX6ULL这类开发板时&#xff0c;选择一款趁手的串口工具&#xff0c;往往能事半功倍。本文将带你深度对比CuteCom和…...