欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的数组深入学习

程序员文章站 2022-07-15 14:34:10
...

Java数组介绍

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

数组的内存图
Java中的数组深入学习
这里面定义int 和 int[] 和boolean 类型的数组 深度hotspot看存储结构
Java中的数组深入学习
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()得到的是什么 会新创建一个数组,把里面的数据复制过去(是引用哦)