复杂数据类型数组、队列HashMap、泛型 | 学习笔记

简介: 快速学习复杂数据类型数组、队列HashMap、泛型,课程揭秘Java面向对象编程的奥秘,深入解析Java经典数据类型,多线程编程详解,带你全面探索多线程编程的世界,攻克Java面向对象编程疑难点!

开发者学堂课程【5天玩转Java 面向对象编程训练营第四课时:复杂数据类型数组、队列HashMap、泛型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/349/detail/4084


复杂数据类型数组、队列HashMap、泛型

 

内容简介

一、课程回顾

二、Java复杂数据结构

 

一、课程回顾

1、对象Object本意是是代表了某个东西,作为一个编程语言的话,为了更好的使用代码去体现要处理的数据而引用了Object

2Class是作为归类而产生的,把不同类型的代码进行分类;

3Class封装:数据(变量)+行为(函数);

4.面向对象的三大特征:

①继承:子类继承父类的代码

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

②封装:Class+修饰符封装代码

即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。在电子方面,封装是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接。

③多态:同一种行为,多种代码实现

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

5、继承的意义:代码重用;

6、多态的意义:同一种行为多种代码实现;

7、多态的实现方式:

①接口多态:依赖实现接口来提供多态能力;

②继承多态:依赖继承来提供多态能力;

③抽象多态:依赖抽象类来提供多态能力

8、接口Interface是:接口是功能的集合,同样可看作是一种特殊的数据类型,是比抽象类更为抽象的类,在Java编程语言中是一个抽象类型,是抽象方法的集合,接口通常以Interface来声明,一个类通过继承借口的方式,从而来继承接口的抽象方法。

9、抽象类Abstract Class的本质是抽象方法只能定义在抽象类中,抽象的方法和抽象的类必须由关键字abstract修饰,抽象类值只定义方法声明,不定义功能主题(即方法的实现),抽象类不可以被创建对象,抽象类只有子类继承了父类的方法,并且对其中的所有抽象方法进行了重写,该子类才不是抽象类,只要不是重写当中的所有抽象方法,那么这个子类还是抽象类。


二、Java复杂数据结构

1、数组Array:物理上内存空间连续,访问迅速快,不灵活;

1.png

数组的概念:数组Array代表的是一组数,一组连续的存储空间,相同类型的元素,所谓数组,就是想通数据类型的元素按一定的序列排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分它们的变量的集合,这个名字组成为数组名,编号成为下标,也叫索引(Index),数组是一种数据结构,它包含若干相同类型的变量。

数组的特点:

数组Array内存空间连续,数组是可以一维、多维或交错的,数值数组元素的默认值设置为零,而引用元素的默认值设置为null,交错数组是数组的数组,因此其元素是引用类型并初始化为mull,数组的索引从0开始:具有n个元素的数组的索引是从0null1,数组元素可以是任何类型,包括数组类型,C#7.0元组不限制数组元素类型,数组元素类型是各种类型,数组访问效率高,但是删除和插入效率低。

2、链表List:物理上不连续,插入,删除灵活;

数组连续的内存存储区

2.png

数组链表:Array数组:一组连续的物理空间,一组元素,不可变长度,查找性能高,但是插入和删除需要移动位置,性能低;

List链表:空间节点指针连接,链条节点,可变长度,插入和删除节点性能高,但是查找性能较低;

ArrayList:可变长度的数组。

List链表:

3.png

 

4.png

双链链表的好处是可以双向查找,但是双向链表需要的空间较大。

举例:List练习

1.新建了一个对象,List,存储整数元素

5.png

2.求和 遍历列表

6.png

3、枚举(Enumeration);

4、集合(Set);

5、向量(Vector);

6、栈(Stack):先进后出;

7、字典(Dictionary)

8、哈希表(Hashtable);

8.1哈希的继承关系:Map的继承关系

7.png

8.png

8.2HashMap,存储

    8.2.1.HashMap哈希映射:存储值对(Key/Value)数据

    8.2.2.类型定义Java.util.HashMap,V>

    8.2.3.public class HashMapV>

    8.2.4.extends AbstractMapV>

    8.2.5.implements Map,Cloneable,Serializable

    8.2.6.继承了抽象类AbstractMap

    8.2.7.基于哈希表的Map接口的实现,并允许null值和null

    8.2.8.提供了get()put()方法

    8.2.9.HashMap是无序的,即不会记录插入的顺序

    8.2.10.HashMap与Hashtable基本一样,但是不同步,允许为null

 8.3HashMap例子

   8.3.1定义用户类型

9.png

  8.3.2.Hash哈希,映射,键值对

10.png

11.png

  8.3.3.根据手机号,查询QQ、微信、钉钉、支付宝、淘宝用户信息。User类型

12.png

  8.3.4.手机号查询账户信息

13.png

  8.3.5.调用重写方法打印字符串

14.png

 

9、队列(Queue);

10、树(Tree)。

15.png

Java作为一个编程语言,已经提供了系统预定义的类型,这些类型帮助快速的去书写代码,本质上就是代码重用。

举例:

1.定义数组 长度5,整数类型的数组

16.png

2.求数组中所有元素的和

17.png

3.字符串数组

18.png

 

相关文章
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
351 0
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
367 0
|
存储 Java 程序员
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
228 0
|
网络协议 Java 数据库连接
HashMap源码手写简易篇(数组+链表)
HashMap源码手写简易篇(数组+链表)
186 0
java202303java学习笔记第三十二天HashMap的使用2
java202303java学习笔记第三十二天HashMap的使用2
156 0
java202303java学习笔记第三十二天HashMap的使用
java202303java学习笔记第三十二天HashMap的使用
113 0
java202303java学习笔记第三十二天HashMap的使用1
java202303java学习笔记第三十二天HashMap的使用1
80 0
java202303java学习笔记第三十二天HashMap的使用3
java202303java学习笔记第三十二天HashMap的使用3
107 0
java202303java学习笔记第三十二天hashMap源码解析4
java202303java学习笔记第三十二天hashMap源码解析4
199 0
java202303java学习笔记第三十二天hashMap源码解析1
java202303java学习笔记第三十二天hashMap源码解析1
166 0