当前位置: 首页 > 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存…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...