《Java面向对象程序设计》学习笔记——第 13 章 泛型与集合框架

​笔记汇总:《Java面向对象程序设计》学习笔记

​# 第 13 章 泛型与集合框架

Java 提供了实现常见数据结构的类,这些实现数据结构的类通称为 Java 集合框架。

在 JDK1.5 后, Java 集合框架开始支持泛型,本章首先介绍泛型,然后讲解常见数据结构类的用法。

13.1 泛型

泛型 (Generics) 是在 JDK1.5 中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构,本节主要对 Java 的泛型有一个初步的认识(基本够用)。

定义泛型类

使用 "class 名称〈泛型列表〉”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:

class People<E>

其中 People 是泛型类的名称, E 是其中的泛型,

也就是说我们并没有指定 E 是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据

也可以不用 E 表示泛型,使用任何一个合理的标识符都可以,但最好和我们熟悉的类型名称有所区别

// 不使用泛型
class Cone {double height,Circle bottom,public Cone (Circle b) {bottom = b;}
}// 使用泛型
class Cone<E> {double height,E bottom,public Cone (E b) {bottom = b;}
}

泛型类声明对象

和普通的类相比,泛型类声明和创建对象时,类名后多了一对“ <> ”

而且要用具体的类型替换“ <> ”中的泛型(或使用统配?)。

用具体的类型

用具体的类型替换“ <> ”中的泛型,例如,用具体类型 CircIe 替换泛型 E :

Circle circle = new Circle();
Cone<Circle> coneOne;    // 具体类型 Circle ,不可以用泛型 E : Cone<E> cone0ne;
coneOne = new Cone<Circle>(circle);

使用统配?

泛型类声明对象时,可以使用通配符?来限制泛型的范围。

例如,限制泛型 E 的范围:

Cone<? extends Geometry> coneOne;

如果 Geometry 是类,那么“<? extends Geometry >”中的“:? extends Geometry ”表示任何Geometry 类的子类或 Geometry 类本身(可理解为泛型 E 被限制了范围);

如果 Geometry 是接口,那么“<? extends Geometry >”中的“:? extends Geometry" 表示任何实现 Geometry 接口的类。

假设 Geometry 是接口, Circle 是实现了 Geometry 接口的类,那么下列创建 cone()ne 就是合法的:

Circle circle = new Circle();
coneOne = new Cone<CircIe>(circ1e);

再如:

Cone <? super B > coneOne;

这里 B 必须是一个类,不可以是接口,“<? super B >”中的“:? super B ”表示 B 类的任何父类(包括 B 类本身)。

泛型类声明对象时,也可以仅仅使用通配符“?”代表泛型 E ,但不限制泛型 E 的范围(”?“代表任意类型),创建对象时,必须用具体的类型,例如:

Circle circle = new Circle();
Cone<?> coneOne = new Cone<Circle>(circle);

小结

Java 泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,

最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。

JDK 1.5 是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更安全。

Java 推出泛型的主要目的是为了建立具有类型安全的数据结构,如链表、散列映射等。

13.2 链表


还在做笔记中,请耐心等待

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

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

相关文章

redis cluster集群搭建

集群搭建 启动6个redis实例 创建6份配置文件 mkdir redis-cluster cd redis-cluster mkdir 7001 7002 7003 8001 8002 80037001文件夹创建配置文件redis.conf port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly ye…

什么是RabbitMQ

目录 RabbitMQ的起源 RabbitMQ的定义 RabbitMQ的优点 RabbitMQ的缺点 RabbitMQ的使用场景 RabbitMQ的起源 RabbitMQ的起源可以追溯到Rabbit Technologies公司创始人Alexis Richardson于2006年创建的另一个项目Rabbit EAI&#xff08;Enterprise Application Integration&a…

在iPhone上构建自定义数据采集完整指南

在iPhone上构建自定义数据采集工具可以帮助我们更好地满足特定需求&#xff0c;提高数据采集的灵活性和准确性。本文将为您提供一份完整的指南和示例代码&#xff0c;教您如何在iPhone上构建自定义数据采集工具。 自定义数据采集工具的核心组件 a、数据模型 数据模型是数据采…

开开心心带你学习MySQL数据库之第六篇上

​ &#x1f4ae; &#x1f4ae;&#x1f4ae; 只要路是对的&#xff0c;就不害怕遥远! &#x1f4ae; &#x1f4ae;&#x1f4ae; &#x1f386;&#x1f386;&#x1f386;窗台是风景&#xff0c;笔下有前途&#xff0c;低头是题海&#xff0c;抬头是未来&#x1f386;&…

SQL Server对象类型(3)——视图(View)

1. 视图概念 与Oracle中的视图类似,SQL Server中的视图也是一种虚的、通过一个查询定义的逻辑对象,主要用于集中、简化、定制用户需求,控住其底层表安全,以及应用系统提供向后兼容等方面。 --注: 1)上述内容中的“虚的”,表示视图本身并不实际包含和存储数据,SQL Ser…

【BI看板】Superset时间过滤控件二次开发

有没有人发觉Superset时间过滤组件非常高级&#xff0c;&#x1f61f;但又有点复杂&#xff0c;没有选择时间区间的快捷方式。 Superset的时间过滤控件可以通过在代码中进行二次开发来进行定制。以下是一些可能有用的提示&#xff1a; 查找源代码&#xff1a;可以在Superset的源…

Redis之bigkey问题解读

目录 什么是bigkey&#xff1f; bigkey引发的问题 如何查找bigkey redis-cli --bigkeys MEMORY USAGE bigKey如何删除 渐进式删除 unlink bigKey生产调优 什么是bigkey&#xff1f; bigkey简单来说就是存储本身的key值空间太大&#xff0c;或者hash&#xff0c;list&…

意向客户的信息获取到底是怎样的,快来get一下

客户信息获取技术真的可以为企业提供精准客源吗&#xff1f;这个渠道到底安不安全&#xff0c;技术到底成不成熟&#xff1f;效果到底如何&#xff1f;下面简单的和大家分析一下。 客户信息获取技术是怎样的 手机采集引流方面&#xff0c;上量不精准&#xff0c;精准不上量的说…

Day58|单调栈part01:739. 每日温度、496. 下一个最大元素

每日温度 leetcode链接&#xff1a;力扣题目链接 视频链接&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度、 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c; 返回一个数组 answer &#xff0c;其中…

浅探Android 逆向前景趋势~

前段时间&#xff0c;我和朋友偶然间谈起安卓逆向&#xff0c;他问我安卓逆向具体是什么&#xff0c;能给我们带来什么实质性的东西&#xff0c;我也和朋友大概的说了一下&#xff0c;今天在这里拿出来和大家讨论讨论&#xff0c;也希望帮助大家来了解安卓逆向。 谈起安卓逆向…

工作中提高CSS的编写效率,可以多用这三个CSS伪类

:where 基本使用 :where() CSS 伪类函数接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 以下代码&#xff0c;文本都会变成 yellow 颜色 :where(div p) span {color: yellow; }<div class"test-div"><…

react 实现监听逻辑

需求&#xff1a; 在一个页面下有多个子tab在某些tab 下&#xff0c;或者父节点的数据更新的时候&#xff0c;其他子tab 或者父节点也要同步更新 进程&#xff1a; 正常情况下会把所有用到的数据都移动到父节点&#xff0c;修改行为也都放在父节点但如果这样的话父节点的数据…

基于RabbitMQ的模拟消息队列之六——网络通信设计

自定义基于TCP的应用层通信协议。实现客户端对服务器的远程调用 编写服务器及客户端代码 文章目录 基于TCP的自定义应用层协议一、请求1.请求格式2.创建Request类 二、响应1.响应格式2.创建Response类 三、客户端-服务器交互四、type五、请求payload1.BasicAruguments(方法公共…

A - Orac and Models(最长上升子序列——加强版)

There are nn models in the shop numbered from 11 to nn, with sizes s_1, s_2, \ldots, s_ns1​,s2​,…,sn​. Orac will buy some of the models and will arrange them in the order of increasing numbers (i.e. indices, but not sizes). Orac thinks that the obtai…

《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输

1--基于TCP实现字符串对话 主要需求&#xff1a; 服务器端和客户端各传递 1 次字符串&#xff0c;基于 TCP 协议&#xff0c;传递字符串前先以 4 字节整数型方式传递字符串长度&#xff0c;剩余部分为字符串数据&#xff1b; 注&#xff1a;下面的代码基于 Windows 系统实现&am…

10、哈希函数与哈希表

哈希函数 出现次数最多的 32G 小文件方法&#xff1a;利用哈希函数在种类上均分 设计RandomPool结构 设计一种结构&#xff0c;在该结构中有如下三个功能: insert(key):将某个key加入到该结构&#xff0c;做到不重复加入 delete(key):将原本在结构中的某个key移除 getRando…

MySQL 使用规范 —— 如何建好字段和索引

一、案例背景 二、库表规范 1. 建表相关规范 2. 字段相关规范 3. 索引相关规范 4. 使用相关规范 三、建表语句 三、语句操作 1. 插入操作 2. 查询操作 四、其他配置 1. 监控活动和性能&#xff1a; 2. 连接数查询和配置 本文的宗旨在于通过简单干净实践的方式教会读…

2023百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会&#xff0c;可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0&#xff0c;发布首个大模型生态伙伴计划&#xff0c;而且也预告了文心大模型4.0的发布&#xff0c;大模型服务的成绩单也非常秀&#x…

C语言与Java语言传输数据 需要转位

在Java语言中&#xff0c;可以通过将整数反转并修改字节顺序来实现低位转高位的转换。下面是一个示例代码&#xff0c;可以将一个整数从低位转高位&#xff1a; public static int toHH(int n) {byte[] bytes ByteBuffer.allocate(4).putInt(n).array();for (int i 0; i <…

uniapp 地图跳转到第三方导航软件 直接打包成apk

// 判断是否存在导航软件judgeHasExistNavignation() {let navAppParam [{pname: com.baidu.BaiduMap,action: baidumap://}, // 百度{pname: com.autonavi.minimap,action: iosamap://}, // 高德{pname: com.tencent.map,action: tencentmap://}, // 腾讯];return navAppPara…