集合体系结构相关知识点

这里写目录标题

  • 集合体系结构
  • Collection集合
    • 概述以及使用
    • 常用方法
    • 集合的遍历
  • List集合
    • 概述以及使用
    • list常用方法
    • list集合特有方法来遍历
    • listiterator(列表迭代器)
    • 并发修改异常
      • 产生原因
    • 增强for循环
    • 常见数据结构
      • 队列
      • 数组
      • 链表
    • list集合子类特点
      • linkedlist常用方法
  • set集合
    • 概述以及特点
    • 哈希值
    • hashSet集合
      • 概述以及特点
      • 案例应用
    • 常见数据结构之哈希表
    • LinkedHashSet集合
    • TreeSet集合
      • 简介以及特点
      • 自然排序Comparable的使用
    • 比较器排序Comparator

集合体系结构

集合体系结构相关知识点_第1张图片
(小技巧:alt+7 可以调出来一个窗口 通过这个窗口可以查看这个类的所有成员信息)

Collection集合

(接口)

概述以及使用

集合体系结构相关知识点_第2张图片
(Arraylist实现了list接口 而list接口可以继承Collection接口 从而实现间接Collection)

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

常用方法

集合体系结构相关知识点_第3张图片
具体代码演示
集合体系结构相关知识点_第4张图片
集合体系结构相关知识点_第5张图片
注意 返回值类型为void的方法,直接调用,无需接变量,也无法输出
返回值类型为Boolean的方法,有些会对集合做一些操作,这时重点在于对集合的操作,有些而是直接判断,这时重点在于对集合的判断

集合的遍历

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

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

List集合

(接口)

概述以及使用

集合体系结构相关知识点_第9张图片
集合体系结构相关知识点_第10张图片
创建对象时,与Collection一致,采用多态的方式,new一个arraylist,arraylist实现了list接口。
由于list接口继承了Collection接口,所以,list可以使用collection的方法

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

list常用方法

集合体系结构相关知识点_第11张图片


注意 对于一些返回值为泛型的方法,会返回集合的元素
注意 如果索引值越界,会报错,索引越界

list集合特有方法来遍历

集合体系结构相关知识点_第12张图片
注意 list集合的长度 要用list.size()获取

listiterator(列表迭代器)

集合体系结构相关知识点_第13张图片
由于在平时开发中,使用Collection的Itterator迭代器较多,所以前四个不作为重点
重点来看 最后一个方法
集合体系结构相关知识点_第14张图片
这个列表迭代器可以用来对集合长度做修改,这是区别于Collection迭代器的。

并发修改异常

产生原因

集合体系结构相关知识点_第15张图片
集合体系结构相关知识点_第16张图片
使用迭代器遍历时,修改了集合中元素的长度(例如上图中 list.add()),所以造成并发修改异常,改为for循环即可解决

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

增强for循环

小技巧
可以用数组或者集合对象 点一个for 即可生成增强for
例如 list.for
集合体系结构相关知识点_第17张图片
具体代码
集合体系结构相关知识点_第18张图片
这里可以利用Iterator迭代器并发修改异常这一特点,来判断增强for循环内部原理是一个Iterator迭代器

常见数据结构

集合体系结构相关知识点_第19张图片

队列

集合体系结构相关知识点_第20张图片

数组

集合体系结构相关知识点_第21张图片

链表

集合体系结构相关知识点_第22张图片
集合体系结构相关知识点_第23张图片
集合体系结构相关知识点_第24张图片
集合体系结构相关知识点_第25张图片
集合体系结构相关知识点_第26张图片

list集合子类特点

集合体系结构相关知识点_第27张图片
集合体系结构相关知识点_第28张图片
list集合有的成员方法,子类都可以使用

linkedlist常用方法

集合体系结构相关知识点_第29张图片
具体代码演示
集合体系结构相关知识点_第30张图片
集合体系结构相关知识点_第31张图片
在这里插入图片描述

set集合

(接口)

概述以及特点

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

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

哈希值

集合体系结构相关知识点_第34张图片
因为hascode是object类中的方法,所以随便new一个类都可以直接调用

集合体系结构相关知识点_第35张图片
默认情况下:
对于不同的对象,就算内容相同,那么哈希值仍然不一样
对于字符串,内容如果相同,那么哈希值就相同,因为像上图方式直接创建字符串对象的话。创建的字符串会放在常量池,那么内容相同的字符串,其地址就会相同,那么哈希值也就相同。

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

非默认情况下:
在对象类里重写object的hascode方法,并返回一个值,那么该类的所有对象的所有hascode调用出来的值都为返回值
集合体系结构相关知识点_第36张图片

hashSet集合

概述以及特点

集合体系结构相关知识点_第37张图片
具体代码集合体系结构相关知识点_第38张图片
与set集合大体一致,只不过创建的是hashSet集合对象而已

案例应用

集合体系结构相关知识点_第39张图片
因为内容相同但是new出来的两个不同的对象,地址不同,那么哈希值就不同,那么就会在输出时输出相同的内容

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

常见数据结构之哈希表

集合体系结构相关知识点_第40张图片
哈希表是一个数组+链表的形式
存储序号由元素的哈希值对16取余计算得到,如果取余结果相同,那么会比较哈希值,不同则会存入该序号的链表,相同的话进一步比较内容,不同则存入链表,相同则不会存入,这也就使得哈希表中元素不重复。

LinkedHashSet集合

集合体系结构相关知识点_第41张图片
集合体系结构相关知识点_第42张图片

TreeSet集合

集合体系结构相关知识点_第43张图片
注意 对于基本数据类型,不可直接使用集合,因为集合只针对引用类型数据,所以,想要存入基本数据类型,就要将基本数据类型换成对应的基本类型包装类,例如:想要存入整数int 就不能在尖括号里写“int”,而是应该写int对应得基本类型包装类 Integer

简介以及特点

集合体系结构相关知识点_第44张图片
注意仍然是不可重复,但是排序有两种方式,由创建集合时使用得构造方法决定
如下图,采用无参构造器创建集合,那么数据会按照自然排序(从小到大)
集合体系结构相关知识点_第45张图片

自然排序Comparable的使用

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

应用案例
集合体系结构相关知识点_第49张图片
集合体系结构相关知识点_第50张图片
这里考虑主要条件与次要条件,次要条件用三元选择器进行选择。
注意,这里重写方法之后,里面compareto方法就是自然排序比较的功能,其返回值是0或者正数或者负数,this.name是集合中第二个元素,s.name是集合中第一个元素。

比较器排序Comparator

简介
集合体系结构相关知识点_第51张图片
集合体系结构相关知识点_第52张图片
直接在测试类里定于对象时,就用有参构造器进行排序以及规则制定,这里参数传入一个Comparator实现类对象,采用内部类的方式。
同时传入两个参数,s1为后传入的元素,s2为先传入的元素,而且在制定规则时,采用get方法获取数据

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

你可能感兴趣的:(java,开发语言)