Java教程

2022-08-06 第三小组 陈迪 学习笔记

本文主要是介绍2022-08-06 第三小组 陈迪 学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

集合(最重要):

前提知识:数据结构——树

结点:是数据结构中的基础,构成复杂数据结构的基本组成单位

树:是n(n>=0)个结点的有限集;n=0,称为空树

在任意的非空树中:

1、有且仅有一个特定的称为根节点

2、当n>1时,其余节点可分为m个互不相交的有限集

定义树的时候:

1、根节点唯一

2、子树的个数没有限制,但一定互不相交

树的定义中,使用了递归方式

结点的度:

结点拥有子节点的数量

结点关系:

结点是父子关系、孩子结点,父结点

结点层次

树的深度:

树中的结点最大层数

二叉树:

n个结点的有限集合,如果·n=0,那就称为空二叉树。

二叉树特点:

1、每个节点最多只有2个子树,不存在度大于2的情况;

2、左子树和右子树有顺序且不能颠倒

3、即使树中某个节点只有一颗子树,也要区分是左子树和右子树。

二叉树的性质:

1、在二叉树中第i层最多有2^(i-1)个结点。

2、二叉树中,如果深度为k,那么最多有2^k-1个结点。

3、n0=n2+1.n0表示度数为0的节点,n2表示度数为二的节点

4、完全二叉树中,具有n个结点的完全二叉树的深度为[log2n]+1;

其中[log2n]是向下取整。

5、若对含有n个结点的完全二叉树从上到下且从左到右进行1——n的编号,则对完全二叉树中任意一个编号为i的节点有如下特性:

若i=1,则该节点是二叉树的根,无父结点,否则,编号为i/2的节点为父结点

若2i>n,则该结点无左孩子节点,否则,编号为2i的结点为左孩子节点

若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为右孩子结点

斜树:

所有的节点都只有左子树的二叉树叫左斜树,只有右子树的二叉树叫右斜树

满二叉树:

在一棵二叉树中,如果所有的分支节点都存在左子树和右子树,则称为满二叉树

满二叉树特点:

1、叶子只能出现在下一层。

2、非叶子结点的度一定是2

3、在同样深度的二叉树中,满二叉树的结点个数最多,叶子树也最多

完全二叉树:

对一颗具有n个结点的二叉树,按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中i结点的位置相同,就称为完全二叉树。

二叉树的存取结构:

1、顺序存储

使用一堆数组存储二叉树中的结点,并且节点的储存位置,就是数组索引下标

当二叉树为完全二叉树时,节点刚好填满数组

如果不是完全二叉树,采用顺序存储,顺序存储结构中已经出现了结构浪费

顺序存储只适用于完全二叉树

2、二叉链表

二叉树每个节点都有两个孩子

可以将节点数据结构定义成一个数据和两个指针域

数据结点:

二叉树遍历:重点考察

二叉树的遍历从根节点出发,按照某种次数依次访问二叉树中所有节点每个节点仅被访问一次

访问次序分为四种:

递归遍历

自上而下,自左而右,每个节点走三次

前序遍历:

从根节点出发按照先左后右的方向访问

中序遍历:

从根节点出发,先向左再根后向右访问

后序遍历:先左后右再看根。

层次遍历:

按照树的层次自上而下遍历二叉树。

其他的树分类:

1、二叉查找树

若左子树不为空,左子树所有值小于根节点的值

若右子树不为空,右子树所有值大于根节点的值

左右子树也是一个二叉查找树

没有键值相等的点

2、平衡二叉树(AVL树)

2.1 含有相同结点的二叉树的不同形态,找出一个查找平均长度最小的一颗二叉查找树

2.2 要么是空树,要么根节点左右子树深度差值不超过1

2.3 左右子树都是平衡二叉树

2.4 二叉树结点的平衡因子定义为该结点左子树深度减去右子树深度

​ 平衡因子=左深—右深—101

3、红黑树

自平衡的二叉树,增加了颜色属性

3.1 只能是黑色或红色

3.2 红黑树中,所有叶子节点后面再装上左右两个空节点保持算法一致

3.3 根节点黑色,其他黑色或红色

3.4 在任意子树中,由上到下走到空节点的黑色节点数一样

4、B—树

是一种平衡多路查找树

(1).m阶B—树每个子节点至多m棵子树

(2).若根节点不是叶子节点,则至少有2棵子树

(3).除根节点外所有非终端节点至少有[m/2]棵子树

(4).每个节点的信息结构(A0、K1、A1、K2、······Kn、An),其中n表示关键字的个数,A是指针

所有叶子节点都出现在同一个层次,且不带任何信息。

5、B+树

B—树和B+树后续数据库阶段才会重点用。

集合框架(重要)

集合:容器,存放数据的一个容器

集合继承结构

Collection:存放单值的最大父接口

​ List(列表)线性表:和数组相似,List可以动态增长,查找元素效率高,插入删除效率低,因为会引起其他元素位置改变

​ Set也是线性表:检索元素效率低,删除插入效率高

Map<K,V>:存放对值的最大父接口

映射,用于保存具有映射关系的数据,Map保存的两组数据:key和value。key和value都可以是任意类型的引用数据类型,key不能重复

List:数据是有顺序(添加的先后顺序)的,数据可以重复

ArrayList:内部结构是数组。比较适合高效率的查找遍历

LinkedList:双向链表。比较适合高频率的新增删除

面试题:

1、Collection和Map的区别?

Collection存放单值,Map存放对值,都是最大父接口。

2、ArrayList和LinkedList的区别?

ArrayList:内部结构是数组。比较适合高效率的查找遍历。 LinkedList:双向链表。比较适合高频率的新增删除

3、ArrayList和Vector的区别?

几乎一摸一样,ArrayList线程异步,不安全;Vector线程同步,安全

Collection接口:

List:有顺序,元素可以重复,添加的先后顺序

Set:无顺序,元素不可以重复,添加的先后顺序

Set集合有顺序,内部算法排序,

Set集合如何确保数据的不重复。保证数据类型的类要重写hashCode·和equals方法。

TreeSet:

排序规则:要排序的对象的类必须实现Comparable接口

compareTo返回值代表int代表排序结果

负数-1,比较的两个值调用者小

0,两个值相等

1,比较的两个值调用者大

面试题:

List和Set的区别·?

List:有顺序,元素可以重复,Set:无顺序,元素不可以重复,

LinkedHashSet和·HashSet区别和联系:

比较接口:

Comparable接口:自然排序,规则固定

Comparator接口:临时排序

Map接口:

1、存储对值的K--V

2、key不能重复,value可以重复

3、没有顺序(添加的先后顺序)

HashMap内部储存结构:

1.7之后:链表+数组+红黑树

面试90%问原理

集合的遍历:

1、for循环

2、foreach语句

3、迭代器

Map集合的遍历

1、for循环:

2、增强for循环

3、增强for循环

Set<Map.Entry<String,String>> entries = map.entryest();

迭代中删除元素

推荐使用迭代器

其他的集合:

1、LinkedHashMap,在HashMap基础上维护了一个双向链表

面试题:线程安全问题

集合需要掌握:

1、如何创建需要的集合,多态

2、主要用到的List和Map

3、各种区别

4、各种集合API的调用

5、两个比较接口

6、各种集合特点,从接口层面到实现类层面

7、重点集合的内部结构

8、各种集合的遍历

9、并发问题

最重要的集合:

ArrayList、HashMap

积压的问题:

1、synchronize原理

2、ReentrantLock原理

3、ArrayList原理

4、LinkedList原理

5、HashMap原理

6、HashSet原理

心得体会

这两天学习了集合和树;学到的理论知识很多,要掌握的也很多,感觉后面的知识越来越难了,要加倍努力,跟上进度。

这篇关于2022-08-06 第三小组 陈迪 学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!