20200321_数组 链表

数组是存放到一组连续空间的内存和相同类型的数据,链表可以存放到一组不连续空间。

ArrayList是查询速度比较高,新增 删除效率比较低

LinkedList是查询速度比较慢,需要一个节点一个节点遍历查找,而操作数据则比较快。可分为单链表,双向链表,循环链表

 

时间复杂度比较

操作ArrayListLinkedList
头部添加O(1)O(1)
尾部添加O(1)O(1)
查找O(1)O(n)
任意位置添加O(n)O(1)
删除O(n)O(1)

大多数变成语言中,数组要从0开始编号:

从数组存储的内存模型上来看,下标最确切的定义应该是偏移(offset),如果用a来表示数组的首地址,a[0]就是偏移为0的位置,

也就是首地址,a[k]表示偏移k个type_size的位置,所以计算a[k]_address = bases_address+k*type_size

如果是从1开始的话 还需要多运行一次-1的操作,对于CPU来说,就是少了一次减法指令。

 

 

JVM标记清除算法:

GC最基础的收集算法就是标记-清除算法,如同他们的名字一样,此算法分为标记 清除两个阶段,先标记出需要回收的对象,再统一回收标记的对象,不足之处 1是效率不高,2是产生碎片内存空间。

 

数组的寻址公式:

一维数组:a[i]_address = base_address+i*type_size

二维数组:假设是m*n a[i,j]=base_address+(i*n+j)type_size

三维数组:假设是m*n*q a[i,j,k]=base_address+(i*n*q+j*q+k)type_size

(多维数组)需要将前面的数组地址加上

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值