数据结构相关

1、树

1、什么是平衡二叉树

它的左右子树的高度差不超过1,左右两个子树都是一棵平衡二叉树。平衡二叉树保证了二叉树的高度不会过高,能够较好地支持常见的二叉树操作,如插入、删除、查找等。

平衡二叉树的常用实现方法有红黑树、AVL树、替罪羊树、Treap、伸展树等。

2、B+树和B树的区别

B树(B-Tree)和B+树(B+ Tree)是常见的平衡查找树

  • B树:B树的节点中既包含键值,也包含对应的数据,就是在叶子节点上同时存储键值和数据。

  • B+树:B+树的节点中只包含键值,对应的数据存储在叶子节点上,所有叶子节点之间都有一个链指针。

  1. 应用场景:
  • B树适用于磁盘存储,能够快速定位到具体的数据。因此,在 索引比较短(比如整型)的情况下,B树的高度会相对较低,可以减少磁盘IO。
  • B+树适用于内存存储和数据库索引。由于B+树的叶子节点之间使用链表连接,在范围查询和顺序遍历时具有较好的性能。
3、什么是红黑树

而红黑树是一种自平衡的二叉树,平衡树的特点就是左右子树的高度差不会超过一,他的高度比较小,有比较快的查询和增删速度。他的一个时间复杂度是O(logn)

4、红黑树跟普通平衡树的区别

红黑树是通过对节点进行着色和旋转操作来保持平衡的,而平衡二叉树是通过调整节点的位置来保持平衡的。

红黑树相对于平衡二叉树来说,插入和删除的平均时间复杂度更低,但是红黑树的平衡维护操作相对复杂一些。

5、树的插入原理

在二叉树中插入节点时,首先判断树是否为空,如果为空,则将新节点作为根节点。如果树不为空,则从根节点开始搜索插入位置。

在搜索插入位置的过程中,比较新节点的值与当前节点的值,如果新节点的值较小,则继续在当前节点的左子树中搜索;如果新节点的值较大,则继续在当前节点的右子树中搜索。

重复以上步骤,直到找到一个空位置,将新节点插入该位置。

2、常见数据结构

数组、栈和队列、链表、集合、各种树,图、堆、哈希表

3、集合和数组、转换

数组可以存储基本数据类型和引用类型,不支持泛型,大小是固定的,集合只能存储引用类型,支持泛型,大小可以改变。而且集合提供了很多丰富的功能,比如Set不允许重复元素,map以键值对存储数据

遍历方式:

  • 数组可以使用for循环或增强for循环进行遍历。
  • 集合提供了多种遍历方式,包括Iterator迭代器、增强for循环、Stream API等。

ArrayList到数组:String[] arr = list.toArray(new String[list.size()]); //list为集合

数组到ArrayList:ArrayList list = new ArrayList<>(Arrays.asList(arr));

4、链表和数组的区别

数组他的内存空间是连续的,长度固定,可以通过索引来直接访问,所以他的查询速度比较快,对应的删除和插入,因为要移动数组中的其他元素,所以会比较慢。哈希表、栈和队列

而链表他是一种动态的数据结构,由一个一个节点组成,内存是不连续的,访问的时候要从头开始一个一个的遍历,相对来说比较慢,删除和新增的时候只需要修改几个节点就行,所以一般比数组快。栈和队列

5、队列和栈的区别

  • 队列是一种先进先出的数据结构,即最先入队的元素最先出队。队列通常使用链表或数组来存储数据,新元素被添加到队尾,而访问或删除元素时从队头进行操作。
  • 栈是一种后进先出的数据结构,即最后压入的元素最先弹出。栈通常也使用链表或数组来存储数据,新元素被压入栈顶,而访问或删除元素时也从栈顶进行操作。
  • 队列常用于实现BFS(广度优先搜索)算法、任务调度和消息传递等场景,其中先进先出的特性很重要。
  • 栈常用于实现DFS(深度优先搜索)算法、递归函数的调用和表达式求值等场景,其中后进先出的特性很重要

6、栈堆溢出一般有什么场景

栈溢出最常见的就是数组越界了,其他还有就是代码写得太复杂,也不能说复杂吧,就比如递归调用层次太多也会造成栈溢出。

而堆溢出的话,我遇到过的是有两个类,a类new了一个b类的对象,b类又new了一个a类的对象,就这样反反复复的不断创建,最终导致堆溢出。

7、int和Integer

首先一个是基本数据类型,一个是对应的包装类,基本那个是直接存储在栈中,初始值是0,int是0,double是0.0,其他就不一一列举了(boolean是false)。而包装类他的引用放在栈中,具体的数据放在堆中,初始值为空,还提供了很多方法,基本类型只能做简单的运算。包装类型是引用的传递,基本类型是值的传递。

8、哪些数据需要初始化

final修饰的变量,还有局部变量要使用它必须初始化

成员变量无需初始化

9、堆和栈的区别

栈内存:用于存储局部变量,数据使用完,所占空间会自动释放。

堆内存:数组和对象,通过new建立的实例都存放在堆内存中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值