java学习笔记1(数据结构基础)

https://www.bilibili.com/video/BV1Lv4y1e7HL?p=21&vd_source=20654419520ba3a97236528b0b5d16c4
黑马

p21 基础数据结构:–数组概述

1)对象占用多少字节:16个字节
2)GC 是垃圾回收器的简称,全称是Garbage Collection。

1.{回收哪个区域? JVM GC只回收堆区和方法区内的基本类型数据和对象。
2.栈区的数据(仅指基本类型数据),在超出作用域后会自动出栈释放掉,所以其不在JVM GC的管理范围内。}
3何为垃圾
一个对象没被引用的时候,这个对象就成了垃圾
5.怎么发现垃圾:
标记-清除算法
5.1引用计数器
说白了就是一个对象被引用了,计算器+1,这个对象没被引用,计数器变为0,就回收。
引用计数器无法解决循环引用,A引用B,B引用C,C引用A,那么这3个对象永远无法被回收
5.2 GC Root(可达性分析算法)
JVM采用的是GC Root
此算法的核心思想:通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任何的引用链相连时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。
标记-清除算法:简单来说就是把没用的进行标记,然后清楚掉标记的
适用场景:存活对象比较多
缺点:需要进行2次扫描(一次标记,一次清除),容易产生内存碎片
分代算法其实跟垃圾回收器有关,ZGC之前所有的垃圾回收器都是分代算法。ZGC不在分年轻代和老年代

3)
数组:一组元素(值或者变量)构成的数据结构,元素每个由索引标识,
存储:连续,地址通过索引可以计算(int:4,double:8)
1.数组:本质是对象,由对象头和数值部分组成,对象头:markword (哈希码,垃圾回收时的分代年龄,给对象加锁时锁的信息)(8个字节)和类指针(4字节)(int[]指针),数组大小,4个字节,2的32次方
在这里插入图片描述
对齐字节指的是;不满8字节:补齐
随机访问的时间复杂度是1,与数据规模无关

p22基础数据结构–动态数组:数组扩容,元素删除
ava有静态数组和动态数组

静态初始化

int[] a = {1,2,3};

动态初始化

int[] a = new int[10]
a[0]=1;
a[1]=2;

p23

.1动态数组插入:
Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList。下面介绍一下ArrayList作为Java动态数组的用法。
add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度。ArrayList的下标是从0开始。

import java.util.ArrayList;
 
public class JavaArrayList {
	public static void main(String[] args) {
		// Java动态数组的初始化
		ArrayList al = new ArrayList();
		// 向Java动态数组中添加数据
		al.add("a");
		al.add("b");
		al.add("c");
		// 输出Java动态数组
		for (int i = 0; i < al.size(); i++) {
			String alEach = (String) al.get(i);
			System.out.println(alEach);
		}
		// 删除数组中的某个元素,删除第二个元素
		al.remove(1);
		// 修改Java动态数组,把新的元素放到第二个位置
		al.add(1, "2");
		// //输出Java动态数组
		for (int i = 0; i < al.size(); i++) {
			String alEach = (String) al.get(i);
			System.out.println(alEach);
		}
	}
}

2动态数组实现(ArrayList原理)
2.1 什么是数组

    同类数据元素的集合,在计算机中以连续的地址存储,编译时确定长度,无法改变。

2.2 什么是动态数组

   数据结构中顺序表的物理实现,同类数据元素的集合,在计算机中以连续的地址存储,大小在创建时决定,但是可以改变。

2.3 为什么使用动态数组

   支持随机访问,查询速度快。但是插入和删除都需要移动元素,比起链表开销较大。如:java集合类中的ArrayList Vector等

p27 二维数组

二维数组
二维数组
一共占用字节数:32+40*3
定位元素,两次索引

p28缓存与局部性原理

从行和从列开始遍历,效率不一样
CPU读写快,pm,皮秒
缓存快,做个媒介
内存:nm纳秒,内存中找就慢了
局部性原理

p29链表概述Link

定义:数据元素的线性集合,每个元素都指向下一个元素,存储上不连续
分类:1.单向链表:还有指下一个元素的指针
每个元素只知道下一个元素是谁
2.双向链表:
上一个和下一个都知道,尾节点:null
3.循环链表:尾节点:头节点
特殊节点:哨兵节点,不存储数据,通常用作头尾,简化边界判断
性能:
时间复杂度是O(n),与数据规模有关
插入新的·元素:数组的:O(n)
链表:插入新的·元素:O(1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值