【吉林大学Java程序设计】第7章:对象的容纳

news2024/10/5 12:53:22

第7章:对象的容纳

  • 1.数组 Arrays
    • 1.1 数组的创建、初始化和使用
      • (1)数组的声明
      • (2)数组初始化
        • 静态初始化
        • 动态初始化
        • 对象数组的初始化
      • (3)数组的使用
    • 1.2 多维数组
    • 1.3 数组与数组的引用
    • 1.4 数组工具类Arrays
    • 1.5 数组对象比较接口
    • 1.6 数组的优缺点
      • 优点
      • 缺点
  • 2.枚举 enum
  • 3.容器 Collection(“集合接口”)
      • 容器类关系
      • Collection接口
    • 3.1 列表 List
      • (1)ArrayList 线性表
      • (2)LinkedList 链表
    • 3.2 泛型
      • (1)使用泛型的语法
      • (2)泛型的使用
      • (3)容器的泛型
    • 3.3 Set 集合
      • (1)Iterator(迭代器)遍历
      • (2)for-each遍历
      • (3)HashSet 哈希集、散列集
      • (4)其他Set
    • 3.4 Map 映射
      • Map常用方法
      • (1)Map遍历
      • (2)HashMap 哈希映射
      • (3)其他Map
    • 3.5 Collections 工具类
      • 容器完整关系图
    • 3.6 容器类型选择
  • 4.泛型中的通配符
    • 4.1 通配符简介
    • 4.2 无界通配符“?”
    • 4.2 通配符上界“? extends T”
    • 4.3 通配符下界“? super T”
    • 泛型通配符小结
  • 总结

1.数组 Arrays

  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于
    该对象的成员变量
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型

1.1 数组的创建、初始化和使用

(1)数组的声明

  • “[]”表示声明的变量是一个数组类型,例:int a1[ ]; int [ ] a2; String [ ] b; Person [ ] p1;
  • Java语言中声明数组时不能指定其长度(数组中元素的个数),例如:int a[5]; //非法

(2)数组初始化

  • 数组在声明之后还不可以使用,在使用数组之前必须为数组分配足够的系统资源,称为“初始化”
静态初始化

在这里插入图片描述

动态初始化

在这里插入图片描述

对象数组的初始化

在这里插入图片描述

  • 对于第二种对象数组的初始化方法,除了创建时要用new,在初始化时也要用new。第一次new只是创建了三个引用变量,第二次new才创建了对象,如下面三张图所示。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(3)数组的使用

  • 按照索引访问数组元素,同C++
  • Java中的数组也是对象,除了数组元素之外,还存在唯一一个可被访问的属性length,记录了数组中元素的个数,不像C++那样得调用函数,例如:a[a.length-1]代表数组中最后一个元素

1.2 多维数组

在这里插入图片描述

  • 存在不规则数组
    在这里插入图片描述
    在这里插入图片描述

1.3 数组与数组的引用

  • Java数组是特殊的对象,数组变量存放一个数组对象的引用
  • 可以将数组变量作为方法参数达到改变数组元素值的效果
    例:Java中引用是通过值传递的。在changeArrayValue中,令para=a,引用的是同一块区域,因此修改para[0]时,实际上是修改了这块区域内的元素值,a[0]也对应改变。而在changeArrayRef中,para一开始等于a,但又令para=temp,这时para不再与a引用相同区域,而是与temp引用相同区域,a[0]仍为99。
    在这里插入图片描述

1.4 数组工具类Arrays

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

1.5 数组对象比较接口

在这里插入图片描述
先将Object o转换为Employee类型的e,用this表示比较发起者
在这里插入图片描述
在这里插入图片描述

1.6 数组的优缺点

优点

  • 数组可以快速地随机访问数组中的元素。数组可以保存基本类型和对象。
  • Arrays类,专门用来操作array。

缺点

  • 数组的容量固定。当数组空间不足的时候需要做数据迁移,效率很低。
    • 注意:数组声明时不能指定长度,但是初始化时固定了数组的大小
  • 经常或者通常情况下,编程人员不知道或无法确定正在编写的程序需要使用多少个对象。

2.枚举 enum

  • 适用于某些数据集合,它们的数值是不变化的,而且集合中的元素个数是有限的,例如:季节、性别、星期

在这里插入图片描述

3.容器 Collection(“集合接口”)

  • 不同于数组,容器的容量是动态的
  • Collection(类集): 一组单独元素集合
    • List :保存的对象有顺序,按照元素的索引位置检索对象。允许重复元素
    • Set :不允许保存重复的元素。元素之间没有顺序。靠元素值检索对象
  • Map(映射): 一组键值对
    • 元素包括“键” 对象和“值”对象。键必须是唯一的,值可以重复

容器类关系

在这里插入图片描述

Collection接口

在这里插入图片描述

3.1 列表 List

  • List常用实现类有ArrayList和LinkedList,两种类型存在性能差异
  • ArrayList与LinkedList常用的大部分方法都是接口List定义的
  • 使用接口List定义类集的方法有一个好处:改变集合类型时其它代码不用变化。例如:

在这里插入图片描述

  • 当使用实现类特有方法时不能使用接口定义:List a= new ArrayList();而应该使用具体类定义:ArrayList a = new ArrayList();

(1)ArrayList 线性表

  • 也被称为动态数组,类似C++的vector
  • 内部维护了一个Object类型数组
    在这里插入图片描述

(2)LinkedList 链表

  • 较快的顺序存取速度。快速的中间插入删除速度。随机存取速度较低。
  • 内部维护了一个带头结点双向链表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.2 泛型

  • 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
    为什么要用泛型? | 泛型方法、通配符该如何使用 | Java中的泛型知识

(1)使用泛型的语法

  • 在声明泛型类的变量时,使用尖括号“<>”来指定形式类型参数
    • class 类名<类型参数列表> {类体}
    • 例:class A <X1,X2> {X1 a; X2 b;}
  • 在应用泛型类时,必须用具体类型填入类型参数,即泛型类的具体化
    • 类名<具体类型列表> 变量名=new 类名<具体类型列表>(构造函数的参数列表);
    • 例:A<String,Integer> m = new A<String,Integer>();

(2)泛型的使用

  • 类,接口,方法都可以使用泛型
    在这里插入图片描述

(3)容器的泛型

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

3.3 Set 集合

  • 继承自Collection 接口。没有额外的方法。
  • 常用的实现类:HashSet 和 TreeSet以及LinkedHashSet。

在这里插入图片描述

(1)Iterator(迭代器)遍历

  • 调用方法iterator() 返回一个迭代器。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
  • 使用**next()**获得序列中的下一个元素,每成功调用一次迭代器向后移动一个元素。
  • 使用**hasNext()**检查序列中是否还有元素。
  • 使用**remove()**将迭代器新返回的元素删除。
  • 接口ListIterator从接口Iterator继承,它可以从两个方向遍历List
  • Collection接口都可以使用迭代器
    在这里插入图片描述

(2)for-each遍历

  • for-each只能遍历两种类型的对象:
    • 数组
    • 实现了java.lang.Iterable接口的类的实例
      在这里插入图片描述

(3)HashSet 哈希集、散列集

  • 添加删除时,若循环比较则效率低下
  • 采用“哈希表”与哈希算法实现快速查找
  • 内部维护一个链表数组(是“链表”和“数组”的组合)
  • 拥有常数查找时间
  • 要求对象重写hashCode()方法与equals()方法
    在这里插入图片描述
    在这里插入图片描述

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

(4)其他Set

在这里插入图片描述

  • 比较HashSet,TreeSet,LinkedHashSet
    • HashSet的元素存放无顺序
    • LinkedHashSet保持元素的添加顺序
    • TreeSet元素按值进行排序存放(默认从小到大)

3.4 Map 映射

  • 一个Map中不能包含相同的key,每个key只能映射一个value。
  • 常用的实现类:HashMap和TreeMap以及LinkedHashMap。

Map常用方法

在这里插入图片描述

(1)Map遍历

  • Map接口没有实现Iterable接口,无法使用迭代器
  • Map键值对元素无序,无法使用索引
  • Map接口提供3种集合的视图:
    • keySet():生成键的Set型集合
    • values():生成值的Collection型集合
    • entrySet():生成键值对的Set型集合
      在这里插入图片描述
      在这里插入图片描述

(2)HashMap 哈希映射

  • HashSet内部维护着一个HashMap
  • HashMap的对象也需要实现 equals()与hashCode() 方法

在这里插入图片描述

  • 键是唯一的,因此再put dog,red的时候,dog的值改变为red
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(3)其他Map

在这里插入图片描述

3.5 Collections 工具类

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

容器完整关系图

在这里插入图片描述

3.6 容器类型选择

在这里插入图片描述

4.泛型中的通配符

4.1 通配符简介

  • Java泛型是强类型检测的,泛型类型的子类型互不相关。为了使泛型类型具有面向对象的继承关系,Java引入了通配符的概念。

4.2 无界通配符“?”

在这里插入图片描述

4.2 通配符上界“? extends T”


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

4.3 通配符下界“? super T”

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

泛型通配符小结

在这里插入图片描述

总结

在这里插入图片描述

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

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

相关文章

Python学习从0开始——Kaggle深度学习002

Python学习从0开始——Kaggle深度学习002 一、单个神经元1.深度学习2.线性单元示例 - 线性单元作为模型多个输入 3.Keras中的线性单元 二、深度神经网络1.层多种类型的层 2.激活函数3.堆叠密集层4.构建Sequential模型 三、随机梯度下降1.介绍2.损失函数3.梯度下降法1.梯度下降法…

Spring Boot 优雅关机时异步线程安全优化

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题

在 Python 中&#xff0c;warnings 是一个内置模块&#xff0c;用于发出有关程序执行的警告信息&#xff0c;这些警告信息通常是关于程序行为的潜在问题。 不过&#xff0c;这些问题通常不是致命的错误&#xff0c;只不过是展示我们代码中潜在的问题&#xff0c;或不推荐的做法…

红酒:家庭环境中如何创造理想的红酒储存环境

对于热爱品鉴红酒的人来说&#xff0c;如何在家庭环境中创造一个理想的红酒储存环境是至关重要的。理想的储存环境能够确保红酒的品质和口感长时间保持理想状态。下面云仓酒庄雷盛红酒将介绍一些在家庭环境中创造理想红酒储存环境的建议&#xff1a; 温度控制&#xff1a;红酒的…

2024年ERP软件公司排名前十!

在当今的商业环境中&#xff0c;ERP&#xff08;企业资源规划&#xff09;系统已成为企业日常运营不可或缺的一部分。然而&#xff0c;如何在这众多的ERP系统软件中筛选出最适合自己的一款&#xff0c;成为许多企业共同面临的挑战。今天&#xff0c;我将带大家盘点erp软件公司的…

生成式AI新篇章:亚马逊云科技助力重塑数字未来

编辑&#xff1a;阿冒 设计&#xff1a;沐由 “任何非常先进的技术&#xff0c;初看都与魔法无异。”对于这句话&#xff0c;想必科幻迷们应该不会感到陌生。这则广为人知的定律&#xff0c;是著名科幻小说作家亚瑟克拉克在《2001太空漫游》中提出的。 正因为如此&#xff0c;当…

知识图谱存在的挑战---隐私、安全和伦理相关和测试认证相关

文章目录 隐私、安全和伦理相关测试认证相关 隐私、安全和伦理相关 从部署拓扑结构而言&#xff0c;知识图谱技术以数据为核心、数据库为载体的方式来存储&#xff0c;有单机、云平台、集群及其组合的部署方式&#xff0c;结合大数据平台、云平台、业务系统、灾备、网络系统及其…

【代码随想录】【算法训练营】【第41天】 [416]分割等和子集

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 40&#xff0c;休息&#xff0c;休息一下~ day 41&#xff0c;艰难的周一~ 题目详情 [416] 分割等和子集 题目描述 416 分割等和子集 解题思路 前提&#xff1a;是否可以将数组分为和相等的…

cloud_enum:一款针对不同平台云环境安全的OSINT工具

关于cloud_enum cloud_enum是一款功能强大的云环境安全OSINT工具&#xff0c;该工具支持AWS、Azure和Google Cloud三种不同的云环境&#xff0c;旨在帮助广大研究人员枚举目标云环境中的公共资源&#xff0c;并尝试寻找其中潜在的安全威胁。 功能介绍 当前版本的cloud_enum支…

VBA学习(2):Excel VBA初学者编写第一个宏

要在Excel中编写宏程序&#xff0c;首先需要了解VBA语言&#xff0c;而快速入门的技巧就是使用宏录制器。 宏录制器就像一台录音机&#xff0c;可以使用VBA监听和记录你在Excel中所做的一切操作。对于初学者来说&#xff0c;你可能不了解VBA&#xff0c;这里&#xff0c;我们会…

如何利用被动DNS(Passive DNS)加强网络安全

通过收集和分析被动DNS数据&#xff0c;可以帮助识别恶意站点&#xff0c;打击钓鱼和恶意软件&#xff0c;本文将介绍如何利用被动DNS&#xff08;Passive DNS&#xff09;加强网络安全。 在过去的一些年里&#xff0c;我们目睹了对DNS基础设施的攻击日益增多&#xff1a;对权…

【S32K 进阶之旅】 将 EB 配置生成的 MCAL 代码集成到 S32DS 中

本文介绍如何使用 S32DS 进行 AUTOSAR MCAL 工程的编译和调试&#xff0c;重点在于将 EB 配置生成的 MCAL 代码集成到 S32DS 中。 虽然配置过程较为繁琐&#xff0c;实操过一遍就会熟悉整个工程的框架。以后每次在 EB 中更新配置&#xff0c;生成代码的文件夹已经集成在 S32DS…

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象&#xff0c;封装继承 一定的selenium基础——本篇不讲selenium&#xff0c;不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢&#xff1a; 代码复用率高…

从多线程设计模式到对 CompletableFuture 的应用

大家好&#xff0c;我是 方圆。最近在开发 延保服务 频道页时&#xff0c;为了提高查询效率&#xff0c;使用到了多线程技术。为了对多线程方案设计有更加充分的了解&#xff0c;在业余时间读完了《图解 Java 多线程设计模式》这本书&#xff0c;觉得收获良多。本篇文章将介绍其…

《C++ Primer》导学系列:第 4 章 - 表达式

4.1 基础 4.1.1 基本概念 组合运算符和运算对象 组合运算符是指将两个或多个操作数结合在一起进行运算的符号。在C中&#xff0c;常见的组合运算符包括算术运算符&#xff08;如, -, *, /, %&#xff09;、关系运算符&#xff08;如<, >, <, >, , !&#xff09;…

docker-compose jira、bugzilla、zentao

参见文章&#xff0c;这里是对之前的内容进行了改动&#xff0c;主要讲怎么将zentao容器融入到已有的docker-compose.yml中 一、zentao镜像 从官网上拉取&#xff1a;https://hub.docker.com/r/easysoft/zentao/tags 可以选择自己想要的版本&#xff0c;这里我选择的是开源版…

工厂物料管理系统(数据库课设)

1.课设要求描述 ●实现物料的分类管理; ●实现部门和员工信息管理; ●实现物料的入库和领用管理; ●实现物料的转仓管理; ●创建触发器&#xff0c;实现物料入库和领用时相应物料库存的自动更新; ●创建触发器&#xff0c;实现转仓时转入仓库物料增加、转出仓库物料减少…

线性卷积(相关)和圆周卷积(相关)以及FFT之间的关系(AEC举例)

时域自适应滤波算法中的线性卷积和线性相关运算量较大&#xff0c;导致计算复杂度升高&#xff0c;我们更愿意把这两个信号变换到频域&#xff0c;通过频域相乘的方式来取代时域复杂度相当高的卷积或相关运算。 预备知识&#xff1a;线性卷积&#xff08;相关&#xff09;和圆…

单一管理平台 - Enterprise Global Console

大约三年前&#xff0c;当我们向客户和社区推出控制台时&#xff0c;MinIO 的世界发生了变化。这是可访问性的巨大飞跃。可靠的 CLI 和 MC 命令很快让位于我们新的基于浏览器的 GUI 的速度和直观可用性。对于开发人员和企业 IT 管理员来说&#xff0c;这是一个游戏规则的改变者…

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹&#xff0c;做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…