Java中的数组深入学习

4 篇文章 0 订阅
2 篇文章 0 订阅
Java数组介绍
数组介绍
  1. 是一种连续的数据结构,且不可变的(计算中)。
  2. 数组在java中不是基本数据结构,是一种对象。
  3. Java的数组封装ArrayList,实现动态扩容。
数组 特性
  1. 数组的为什么查找的时间复杂度为O(1)
    首先它是连续的内存空间,定位的时候是通过首地址加上所谓的偏移量(数据size*offset)
    数组是一个对象,继承了Object里面的属性重写了clone方法 和 提供了数组的length属性
  length
 clone()
 //继承Object的属性

数组的内存图
在这里插入图片描述
这里面定义int 和 int[] 和boolean 类型的数组 深度hotspot看存储结构
在这里插入图片描述
2. 首先是我们当前类的Test对象的的头部32个字节(也就是2排 里面包含了锁 hashcode等)下一次分享对象的内存结构
3. 我们发现其实这里面Test对象头只用了24个字节 ,那还有8个字节竟然被int a = 12占用了也就是xoc,为啥呢,指针压缩了,3. 下面就是存的数组了,看右边对应的,其实int []b也是有对象头的 (数组是一个对象),按照原理来说这个对象应该是指向内存中的任意一个堆内存空间的把,因为他是一个对象嘛,数组很不一样:eac59250 直接就分配和Test对象是一个连续的空间
4. 但是右边的00000001是什么东东在数组的后面,其实就是boolean c的值true就是1 (注意哦boolean的变量也是一个占用int类型的空间值) 下面的就是我们的数组对象:1.mark标志(猜测是对象公有的) 2.00000003这个就是数组对象的length属性3.下面就是数组的元素值

至于要看数组的class文件的内容(虚拟机自动生成的)

  1. 封装数组常用的ArrayList。
    ArrayList里面的方法有哪些
boolean isEmpty()
boolean contains(Object o) //注意是循环判断的  (可以比较null 看有没有null存在 非null 其实就是equals()  对象比较重写的)
clone()  //注意这个里面的调用是Object的里面的clone 而不是数组对象的clone(返回是) 所以就需要copy进新的数组
get(int index)
 E set(int index, E element)
 boolean add(E e)

我们主要看数组里面的clone方法**(不是ArrayList里面的clone)**
int b[] = {1,2,3};
b.clone()得到的是什么 会新创建一个数组,把里面的数据复制过去(是引用哦)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值