集合体系结构相关知识点

集合体系结构

在这里插入图片描述
(小技巧:alt+7 可以调出来一个窗口 通过这个窗口可以查看这个类的所有成员信息)

Collection集合

(接口)

概述以及使用

在这里插入图片描述
(Arraylist实现了list接口 而list接口可以继承Collection接口 从而实现间接Collection)

具体代码
在这里插入图片描述
<>里说明的是集合元素的类型

常用方法

在这里插入图片描述
具体代码演示
在这里插入图片描述
在这里插入图片描述
注意 返回值类型为void的方法,直接调用,无需接变量,也无法输出
返回值类型为Boolean的方法,有些会对集合做一些操作,这时重点在于对集合的操作,有些而是直接判断,这时重点在于对集合的判断

集合的遍历

在这里插入图片描述
Collection集合有自己专用的迭代器,但是不能直接创建,而是需要通过该集合的方法的返回值得到,返回值是实现迭代器这个接口的实现类,所以这里是多态的方式创建了Iterator对象。
具体代码
在这里插入图片描述
Iterator 自定义变量名 = Collection类对象.iterator();
注意这里的泛型E与Collection类的泛型保持一致。
在这里插入图片描述
对于迭代器这个接口有两个方法,具体介绍看向上第三图

注意,因为next方法 返回的是集合下一个元素,所以在该循环中,无需用i 和 i++来控制循环。
注意,调用it的next方法时,返回的是集合中的元素,所以要用与集合的元素类型一致的变量接住,再进行后续操作。

List集合

(接口)

概述以及使用

在这里插入图片描述
在这里插入图片描述
创建对象时,与Collection一致,采用多态的方式,new一个arraylist,arraylist实现了list接口。
由于list接口继承了Collection接口,所以,list可以使用collection的方法

注意 对对象进行遍历时,对于一个标准流对象,要用如getName这样get方法来获取成员数据进而输出。

list常用方法

在这里插入图片描述

在这里插入图片描述
注意 对于一些返回值为泛型的方法,会返回集合的元素
注意 如果索引值越界,会报错,索引越界

list集合特有方法来遍历

在这里插入图片描述
注意 list集合的长度 要用list.size()获取

listiterator(列表迭代器)

在这里插入图片描述
由于在平时开发中,使用Collection的Itterator迭代器较多,所以前四个不作为重点
重点来看 最后一个方法
在这里插入图片描述
这个列表迭代器可以用来对集合长度做修改,这是区别于Collection迭代器的。

并发修改异常

产生原因

在这里插入图片描述
在这里插入图片描述
使用迭代器遍历时,修改了集合中元素的长度(例如上图中 list.add()),所以造成并发修改异常,改为for循环即可解决

s.equals(“元素”)用于判断list集合中是否有该元素,这里利用字符串内容相同来判断,s为list集合中的某一个元素,判断某一个元素的内容是否与“world”(题目指定内容)相同

增强for循环

小技巧
可以用数组或者集合对象 点一个for 即可生成增强for
例如 list.for
在这里插入图片描述
具体代码
在这里插入图片描述
这里可以利用Iterator迭代器并发修改异常这一特点,来判断增强for循环内部原理是一个Iterator迭代器

常见数据结构

在这里插入图片描述

队列

在这里插入图片描述

数组

在这里插入图片描述

链表

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

list集合子类特点

在这里插入图片描述
在这里插入图片描述
list集合有的成员方法,子类都可以使用

linkedlist常用方法

在这里插入图片描述
具体代码演示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

set集合

(接口)

概述以及特点

在这里插入图片描述
创建对象时,因为set集合仍然是一个接口,所以还是要用其子类进行实例化,如下图
在这里插入图片描述
在这里插入图片描述
注意,set集合不包含重复元素,所以如果添加了重复元素,那么,只会输出一次,如上图,添加了两个“world”,只输出了一个world

这里是否保留重复元素,要看哈希值是否重复且内容是否重复,而哈希值与地址值有关。哈希值是否重复且内容是否重复,二者都重复才会被认为是重复元素,否则,不会被认为是重复元素,也就不会被哈希表限制存入,也就不会被set集合限制输出。

哈希值

在这里插入图片描述
因为hascode是object类中的方法,所以随便new一个类都可以直接调用

在这里插入图片描述
默认情况下:
对于不同的对象,就算内容相同,那么哈希值仍然不一样
对于字符串,内容如果相同,那么哈希值就相同,因为像上图方式直接创建字符串对象的话。创建的字符串会放在常量池,那么内容相同的字符串,其地址就会相同,那么哈希值也就相同。

有两个特例的字符串,内容不同但是哈希值相同

非默认情况下:
在对象类里重写object的hascode方法,并返回一个值,那么该类的所有对象的所有hascode调用出来的值都为返回值
在这里插入图片描述

hashSet集合

概述以及特点

在这里插入图片描述
具体代码在这里插入图片描述
与set集合大体一致,只不过创建的是hashSet集合对象而已

案例应用

在这里插入图片描述
因为内容相同但是new出来的两个不同的对象,地址不同,那么哈希值就不同,那么就会在输出时输出相同的内容

那么如果想实现将不同的对象但是内容相同,只输出一次,基于哈希值,除了内容相同之外,还需要哈希值相同,那么需要在对象所抽象的类当中重写hascode和equals方法(以保证哈希值与内容都相同),具体操作直接alt+ins 自动生成即可。(结合下面哈希表理解)

常见数据结构之哈希表

在这里插入图片描述
哈希表是一个数组+链表的形式
存储序号由元素的哈希值对16取余计算得到,如果取余结果相同,那么会比较哈希值,不同则会存入该序号的链表,相同的话进一步比较内容,不同则存入链表,相同则不会存入,这也就使得哈希表中元素不重复。

LinkedHashSet集合

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

TreeSet集合

在这里插入图片描述
注意 对于基本数据类型,不可直接使用集合,因为集合只针对引用类型数据,所以,想要存入基本数据类型,就要将基本数据类型换成对应的基本类型包装类,例如:想要存入整数int 就不能在尖括号里写“int”,而是应该写int对应得基本类型包装类 Integer

简介以及特点

在这里插入图片描述
注意仍然是不可重复,但是排序有两种方式,由创建集合时使用得构造方法决定
如下图,采用无参构造器创建集合,那么数据会按照自然排序(从小到大)
在这里插入图片描述

自然排序Comparable的使用

(Comparable是一个接口)
使用TreeSet集合存储对象元素并且使用无参构造器想要实现自然排序时,要将元素的类实现Comparable接口,并重写compareTo方法,如下图
在这里插入图片描述
而返回值有说法:
return 0 :只输出一个元素
return 1 :元素以存储顺序正常排序(升序)
return -1:元素以存储顺序逆序排序(降序)
(下图为降序)
在这里插入图片描述
自然排序:对制定需求设置规则
在这里插入图片描述
这里this.age是第二个元素中某一个数据,s.age是第一个元素中某一个数据,所以这里满足“年龄按照从小到大排序”

应用案例
在这里插入图片描述
在这里插入图片描述
这里考虑主要条件与次要条件,次要条件用三元选择器进行选择。
注意,这里重写方法之后,里面compareto方法就是自然排序比较的功能,其返回值是0或者正数或者负数,this.name是集合中第二个元素,s.name是集合中第一个元素。

比较器排序Comparator

简介
在这里插入图片描述
在这里插入图片描述
直接在测试类里定于对象时,就用有参构造器进行排序以及规则制定,这里参数传入一个Comparator实现类对象,采用内部类的方式。
同时传入两个参数,s1为后传入的元素,s2为先传入的元素,而且在制定规则时,采用get方法获取数据

字符串可以直接调用CompareTo方法,用于比较字符串是否相同,格式如图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值