JAVA集合、泛型

集合知识点基础

集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。

集合类体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pl8tt4T9-1612270458856)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201114202917.png)]

Collection集合

一、collection集合的概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4LZNPjvo-1612270458858)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201152617549.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1EwrX4f-1612270458860)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201153508739.png)]

二、Collection集合的常用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rqd1Auhv-1612270458863)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201153557158.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKNKQ4W8-1612270458866)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201155139603.png)]

三、Collection集合的遍历

Iterator:迭代器,集合的专用遍历方式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q32Gm1PH-1612270458867)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201155553633.png)]

在这里插入图片描述

四、集合的使用步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VykeDCdN-1612270458869)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201164458340.png)]

五、案例

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合。

List集合

一、List集合概述和特点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QkHIzXsK-1612270458870)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201165417472.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7lQBqBoJ-1612270458871)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201170544763.png)]

二、List集合特有方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0a5Oeqa1-1612270458872)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201170701423.png)]

案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLU0Vffi-1612270458872)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201173840505.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0ThkYVE-1612270458873)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201191727448.png)]

三、List集合的并发性异常

原因:迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cr7OvXqQ-1612270458874)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201193314669.png)]

发生这种错误的修改方案( 用for循环遍历,然后用集合对象做对应的操作即可)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWupbtbX-1612270458875)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201193500542.png)]

四、ListIterator(列表迭代器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mtk1XPkS-1612270458875)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201203704118.png)]

一般正向遍历的时候用Iterator就可以了,不怎么用ListIterator

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSwOVgEU-1612270458876)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201204004994.png)]

这里需要注意的是ListIterator使用add方法不会引发并发性异常。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aimvk6Wi-1612270458877)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201204300041.png)]

五、增强For循环

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJ6T2Qhv-1612270458878)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201205125259.png)]

List常用的两个子类

这里其实是两个数据结构:ArrayList(这个其实就是数组实现的)、LinkedList(这个其实是链表形式实现的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccqpXsVJ-1612270458879)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201212148982.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dzWqAe9-1612270458880)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201212704900.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YA2WXMrg-1612270458881)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201213858524.png)]

Set集合

一、Set集合的概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRudQsp7-1612270458882)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201214048099.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkkoDPdx-1612270458883)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201214301556.png)]

二、哈希值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfjQkCw1-1612270458883)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201214622985.png)]

正常调用自带的哈希值的方法的话,相同的对象得到的哈希值是一样的,不同的对象的哈希值是不同的。但是通过方法重写。可以实现不同的对象的哈希值是相同的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrkgPIPx-1612270458884)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201215228824.png)]

三、HashSet集合概述和特点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4hi5nQY-1612270458885)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201215517915.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwO8QEPu-1612270458885)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201215942541.png)]

四、哈希表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXXeH8Q9-1612270458886)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201221052061.png)]

先比较哈希值,当哈希值相同的时候就比较内容,当内容也是不一样的时候,就可以存进去了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXnBgBft-1612270458887)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201221554976.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtLf3VIt-1612270458887)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201221710042.png)]

五、LinkedHashSet集合概述和特点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ev9ASfWb-1612270458888)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201221930107.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdnQvZee-1612270458889)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201222046814.png)]

六、TreeSet集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thR6e7d4-1612270458889)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201222454226.png)]

1)、自然排序

下面这个图是重点,看不懂就看下面的程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ve4bKidL-1612270458890)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202154243214.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adzDvCKT-1612270458891)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210201222710492.png)]

下面是一个构建TreesSet结构的例子,这里需要重写CompareTo接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-65ENmTZu-1612270458891)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202153107602.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1jKs3bUg-1612270458892)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202153203343.png)]

这里的1其实就是放后面的意思,-1就是放前面,所以看下面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H67cqLKv-1612270458893)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202153522155.png)]

如果年龄相同就看下面的姓氏的字母:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JAs4A2FU-1612270458894)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202154031320.png)]

2)、比较器排序Comparator的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rIiwT9x8-1612270458894)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202161129290.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWCavRRz-1612270458895)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202161053148.png)]

案例1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SZg7U10-1612270458896)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202161236951.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aei59B0p-1612270458897)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202161921173.png)]

案例2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrqOg166-1612270458897)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202162041942.png)]

Hashset不会排序,但是TreeSet会排序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4FwvAfa-1612270458898)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202163237163.png)]

泛型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSiyqnEo-1612270458899)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202163455726.png)]

使用泛型可以提前定义好数据类型,省的弄错。

另外再add对象的时候不用进行强制类型转换了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5vI2icE-1612270458899)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202164119901.png)]

泛型

泛型类

在这里插入图片描述

泛型方法

这个泛型方法相对于上面的泛型类的好处是:在实例化对象的时候可以不用先指定数据类型,最后调用方法的时候指定即可。

在这里插入图片描述

泛型接口

在这里插入图片描述

接口的实现类如下:

在这里插入图片描述

类型通配符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7mBBuE0-1612270458905)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202171925682.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PP18Bveo-1612270458905)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202172445751.png)]

可变参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L094sYqP-1612270458906)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202181535498.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnefIJB8-1612270458906)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202181721716.png)]

可变参数的注意事项

这里的变量其实是一个数组

如果一个方法有多个参数,包括可变参数,可变参数要放在最后。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTXWejMD-1612270458907)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202182018592.png)]

可变参数的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45AI0hmN-1612270458907)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202185217537.png)]

在这里插入图片描述

Map集合

Map集概述和使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shLvNolr-1612270458909)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202191545929.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fEdY1apD-1612270458910)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202192050235.png)]

Map集合的基本功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLl2BYtV-1612270458910)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202193503799.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwPsRnNW-1612270458911)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202193957242.png)]

Map集合的获取功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jjbNP2E9-1612270458911)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202194043531.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiKjzPBm-1612270458912)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202194326927.png)]

Map集合的遍历

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l8aG1KOg-1612270458912)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202194614991.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lxq7U0vD-1612270458913)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202194735085.png)]

案例

一、

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3lv8FFR-1612270458915)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202194919265.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BM0kd8X7-1612270458915)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202195241761.png)]

二、集合嵌套的案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81tgV6lv-1612270458916)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202201810308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4LpImUf-1612270458916)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202201823044.png)]

在这里插入图片描述

三、Hashmap嵌套ArrayList

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t2l6deTd-1612270458918)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202203512616.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBzQUgd5-1612270458919)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202203522034.png)]

在这里插入图片描述

四、案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6BYgxWe-1612270458921)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202205133376.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7Q757SN-1612270458922)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202205151124.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yi1OyZQi-1612270458923)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210202205210408.png)]

猜你喜欢

转载自blog.csdn.net/qq_32651847/article/details/113573983