数据结构 笔记

数据结构:

数据结构:组合和存储数据的。

分为逻辑结构和物理结构两大类。
逻辑结构:
1.集合结构:集合结构中数据元素除了属于同一个集合外,它们之间没有任何其它的关系。
2.线性结构:数据元素之间存在一对一的关系。
3.树形结构:一对多。

算法时间复杂度

核心操作的次数和输入规模

堆和栈
1概述

Java虚拟机在运行时都要开辟空间。

img

2.堆内存

​ 堆是java虚拟机所管理的内存中最大一块存储区域。堆内存被所有线程共享,主要存储Java中的对象和数组,当我们new一个对象或者数组时,就会在堆内存中开辟一块空间,用于存放这个对象或者数组。

堆内存特点:

​ ①.堆可以类似地看作管道,特点是:先进先出,后进后出。

​ ②.堆可以在运行时动态分配内存大小,生存期不需要事先告诉编译器。因为它是在运行时动态分配内存,它的存取速度会比较慢。

3.栈内存
定义:

​ JVM中的栈包括java虚拟机栈和本地方法栈,两者的区别是,java虚拟机栈为jvm执行java方法服务,本地方法栈为JVM使用到的Native方法服务。

​ 栈是限定仅在表头进行插入和删除操作的线性表,即入栈和出栈都是对栈顶元素进行操作的。栈是线程私有的,生命周期与线程相同。每个线程都会分配一个栈空间,每个线程拥有独立的栈空间。栈中的元素为栈帧,每个方法执行时都会创建一个栈帧。栈帧中存储了局部变量表,操作数栈,动态连接和方法出口等信息。每个方法从调用到运行结束的过程,就对应着一个栈帧在栈中从入栈到出栈的过程。
其中局部变量表中存储了基本数据类型的局部变量和对象的引用(String、数组、对象等),但是不存储对象的内容。
在这里插入图片描述

​ 栈内存是Java的另一种内存,可以用来存储局部变量,定义在方法中的都是局部变量(方法外为全局变量),for循环内部定义的也是局部变量。需要先加载函数才能进行局部变量的定义。

栈内存的特点:

​ ①.先进后出,后进先出;

​ ②.存取速度比堆更快,仅次于寄存器。栈中的数据可以共享,但是缺点是,存在栈中的数据大小是固定的,缺乏灵活性。

数据共享:
int a = 3;
int b = 3;

第一步处理:

​ 1.编译器先处理int a = 3;

​ 2.创建变量a的引用;

​ 3.在栈中查找是否有3这个值;

​ 4.没有找到,将3这个值存入栈中,a指向3。

第二步处理:

​ 1.处理b=3;

​ 2.创建变量b的引用;

​ 3.在栈中找是否有3这个值,找到,直接将b指向3.

第三步处理:

​ 1.a=4;

​ 同上方法,a会指向4,b的值不会发生改变。

注意:如果是两个对象的话,就不同了。对象的话指向的是同一个引用,一个发生改变,另一个也会发生改变。

4.堆和栈的区别

​ JVM是基于堆栈的虚拟机。JVM为每个新创建的线程都分配一个堆栈。对于一个Java程序来说,它的运行是通过对堆栈的操作来完成的,堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。

区别:
  • 堆内存用来存放新创建的对象和数组。
  • 栈内存用来存放方法或者局部变量等。
  • 堆是先进先出,后进后出
  • 栈是后进先出,先进后出

相同点:

  • 都是属于java内存的一种
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值