一:
栈:先进后出,画图存储元素(A,B,C)(压栈),并取出(弹栈),画图进行演示
队列:先进先出,横向队列,存入取出,画图演示、
数组:查询快,增删慢(自己创建一个数组int[] arr = {11,13,45,67,34},
需求一:在45号元素后面增加一个元素23
需求二:删除元素45
需求三:我要获取45这个元素
链表:通过一个链子把多个结点(元素)连接起来,由数据和地址组成的一个元素,
节点本身必须有一个地址值(就是下一个元素的地址值)
特点:查询慢,增删快
需求1:查询元素45,需要一个一个从头遍历
需求2:删除45这个元素,(1.保存45这个元素所保存的地址值 2.
双向链表 :数据+下一个元素的地址+上一个元素的地址
单向循环链表 :最后一个元素存储的地址是第一个元素的地址值
双向循环链表:存储的是两个地址,最后一个元素所存储的两个地址分别是上一个元素的地址和第一个元素的地址
hash:一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,
变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,
不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的信息压缩到
2.1
案例:写一个学生数组,提出需求,根据需求分析数组和集合的区别
* 需求:存储3个学生对象,并输出学生对象的数据信息。
1.长度固定
2.可以存储基本类型,也可以存储引用类型
3.存储元素类型一致
集合:
1.长度可变
2.只可以存储引用类型
3.可以存储多种类型
2.2
* 为什么出现集合类?
* 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,我们就需要对这多个对象进行存储。
* 而目前为止我们学习过的可以存储多个元素的东西是数组,但是呢,数组长度固定,不能适应变化的需求,所以,Java
* 就提供了集合类供我们使用。
三.
3.1
* Java提供了集合类供我们使用,而我们的需求可能是这样的:
* 我要求我的元素是有序的,
* 我要求我的元素是无序的,
* 我要求我的元素是唯一的,
* 我要求我的元素是可以重复的。
* 为了满足不同的需求,Java就提供了不同的集合类。
* 而这些集合类由于数据结构不同,才可以满足这些条件的。
* 数据结构:存储元素的方式。
* 而无论这些集合的结构是什么样子的,都是要装水的,所以,他们应该有共性的内容。
* 通过不断的向上提取,最终会形成一个集合的继承体系图。
3.2
java API 集合类图介绍
Collction体系结构图
Collection
List
ArrayList
Vector
LinkedList
Set
HashSet
TreeSet
四.开发中常类介绍
String,Math,Scanner,List,ArrayList,等等
集合部分:
1.Collection
1.1
简单介绍这个接口
是集合的顶层结构,定义了集合的共性功能。
可以存储对象,这些对象也被称为元素。
1.2
2.List
(1)List集合的元素有序(存储和取出顺序一致),元素可重复
(2)List的特有功能:
(4).List的倒序与洗牌
3.LinkedList
* LinkedList特有功能:
8.ArrayList与LinkedList的相同点与不同点 (面试题**)
相同点:有顺序的,元素可以重复
(1)ArrayList特点:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
(2)LinkedList特点:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
9.泛型入门
泛型
(1)是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确类型的特殊类型
(2)格式:
<数据类型>
默认情况下,是Object类型。
A:把运行时期问题提前到了编译时期
B:避免了强制类型转换
C:优化程序设计,解决了黄色警告线问题
(4)在哪里用?
一般来说就是在集合中用的多。
如果类或者接口或者方法出现了<>说明这里就有泛型。
拓展
(5)泛型的概述(了解)
A:泛型类(把泛型定义在类上)
B:泛型方法(把泛型定义在方法上)
C:泛型接口(泛型定义在接口上)
(6)泛型通配符
<?> 不确定类型
<? extends E> 向上限定,E及其子类
<? super E> 向下限定,E及及其父类
栈:先进后出,画图存储元素(A,B,C)(压栈),并取出(弹栈),画图进行演示
队列:先进先出,横向队列,存入取出,画图演示、
数组:查询快,增删慢(自己创建一个数组int[] arr = {11,13,45,67,34},
需求一:在45号元素后面增加一个元素23
需求二:删除元素45
需求三:我要获取45这个元素
链表:通过一个链子把多个结点(元素)连接起来,由数据和地址组成的一个元素,
节点本身必须有一个地址值(就是下一个元素的地址值)
特点:查询慢,增删快
需求1:查询元素45,需要一个一个从头遍历
需求2:删除45这个元素,(1.保存45这个元素所保存的地址值 2.
断开链子 3.将第一个步骤中取得到的地址值赋值给45的下一个元素))
双向链表 :数据+下一个元素的地址+上一个元素的地址
单向循环链表 :最后一个元素存储的地址是第一个元素的地址值
双向循环链表:存储的是两个地址,最后一个元素所存储的两个地址分别是上一个元素的地址和第一个元素的地址
hash:一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,
变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,
不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的信息压缩到
某一固定长度的消息摘要的函数。
2.1
案例:写一个学生数组,提出需求,根据需求分析数组和集合的区别
* 需求:存储3个学生对象,并输出学生对象的数据信息。
集合和数组的区别:数组不适应变化的需求,所有Java就提供了集合类供我们使用
数组:1.长度固定
2.可以存储基本类型,也可以存储引用类型
3.存储元素类型一致
集合:
1.长度可变
2.只可以存储引用类型
3.可以存储多种类型
2.2
* 为什么出现集合类?
* 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,我们就需要对这多个对象进行存储。
* 而目前为止我们学习过的可以存储多个元素的东西是数组,但是呢,数组长度固定,不能适应变化的需求,所以,Java
* 就提供了集合类供我们使用。
三.
3.1
* Java提供了集合类供我们使用,而我们的需求可能是这样的:
* 我要求我的元素是有序的,
* 我要求我的元素是无序的,
* 我要求我的元素是唯一的,
* 我要求我的元素是可以重复的。
* 为了满足不同的需求,Java就提供了不同的集合类。
* 而这些集合类由于数据结构不同,才可以满足这些条件的。
* 数据结构:存储元素的方式。
* 而无论这些集合的结构是什么样子的,都是要装水的,所以,他们应该有共性的内容。
* 通过不断的向上提取,最终会形成一个集合的继承体系图。
3.2
java API 集合类图介绍
Collction体系结构图
Collection
List
ArrayList
Vector
LinkedList
Set
HashSet
TreeSet
四.开发中常类介绍
String,Math,Scanner,List,ArrayList,等等
集合部分:
1.Collection
1.1
简单介绍这个接口
是集合的顶层结构,定义了集合的共性功能。
可以存储对象,这些对象也被称为元素。
1.2
* 成员方法:
1.3
* 迭代器:
* Iterator iterator()
* Object next():返回迭代的下一个元素,并移动指向的位置
* boolean hasNext():判断是否有元素
*
* NoSuchElementException:没有这样的元素异常。
* 原因是:你已经获取到元素的末尾了,你还要继续获取元素,已经没有了,所以就报错了。
* 解决方案:你不要再拿了。我哪知道什么就不拿了啊?怎么办呢?就应该在拿之前判断一下是否有元素。
*
* 迭代器遍历集合:
* 迭代器是依赖于集合而存在的。所以,要想得到迭代器对象,必须先有集合对象。
*
* 迭代步骤:
* A:通过集合对象获取到迭代器对象
* B:通过迭代器对象的hasNext()方法判断是否有元素
* C:通过迭代器对象的next()方法获取元素
练习:
在集合中存储3个学生对象,用迭代器遍历,拿出每一个学生对象的属性。2.List
(1)List集合的元素有序(存储和取出顺序一致),元素可重复
(2)List的特有功能:
(3)案例:
List存储自定义对象并遍历(迭代器,普通for)
(4).List的倒序与洗牌
3.LinkedList
* LinkedList特有功能:
8.ArrayList与LinkedList的相同点与不同点 (面试题**)
相同点:有顺序的,元素可以重复
(1)ArrayList特点:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
(2)LinkedList特点:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
9.泛型入门
泛型
(1)是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确类型的特殊类型
(2)格式:
<数据类型>
默认情况下,是Object类型。
这里数据类型只能是引用类型。如果你看到写基本类型也行,其实这里使用了自动装箱。
练习:用泛型写一个学生类
A:把运行时期问题提前到了编译时期
B:避免了强制类型转换
C:优化程序设计,解决了黄色警告线问题
(4)在哪里用?
一般来说就是在集合中用的多。
如果类或者接口或者方法出现了<>说明这里就有泛型。
拓展
(5)泛型的概述(了解)
A:泛型类(把泛型定义在类上)
B:泛型方法(把泛型定义在方法上)
C:泛型接口(泛型定义在接口上)
(6)泛型通配符
<?> 不确定类型
<? extends E> 向上限定,E及其子类
<? super E> 向下限定,E及及其父类