Java学习笔记Day8:数组

数组

  • 相同类型数据的集合,内存是连续的。
  • 定义:
 int[] array1={1,2,3,4,5};(静态初始化)
 int[] array2=new int[]{1,2,3,4,5};(动态初始化)
 int[] array3=new int[5];
  • 引用:用来存放对象的地址

  • 数组越界异常(运行期间)

  • 数组名.length:数组长度。length不是方法,是一个属性。
    字符串名.length():字符串长度。length是方法

  • foreach循环

for(int x:array1){
}
for(表达式1:表达式2{
}
//表达式1:数组当中的变量
//表达式2:数组名

for循环和foreach的区别?
foreach不能用下标来访问

  • 当定义好数组之后,没有初始化,默认值为0;数组当中是引用类型,为NULL
  • java 按值传递

java当中数组的内存分析:

划分区域:

  • java虚拟机栈:局部变量

  • 本地方法栈:native方法:底层由c/c++实现,特点快

  • 程序计数器:指令

  • 堆:对象。new关键字

  • 方法区: 静态变量 类信息

  • 常量池:作用-》存放字符串常量的。
    在jdk1.7之前,常量池在方法区当中
    在jdk1.7之后,常量池被挪到了堆当中

注意:

  • int[] array={};//长度为0
  • [l@16d3586 地址的哈希码 ,这个地址是通过真实地址进行哈希过的
  • null:是所有引用类型的初始值。和0没有关系
  • 点号之前Null大概率情况下出现空指针异常

copy数组:

  • 方法一:for循环
  • 方法二:System.arraycopy(array,0,array2,0,array.length);
    速度快,被native所修饰的方法
  • 方法三:array2=Arrays.copyOf(array,array.length);
    内部调用System.arraycopy();
  • array2=array.clone();

对数组当中如果是简单类型来讲,就是深拷贝
如果数组当中存放的是引用类型,就是浅拷贝

  • copyOf 是将数组进行了 深拷贝, 即又创建了一个数组对象, 拷贝原有 数组中的所有元素到新数组中. 因此,修改原数组,不会影响到新数组.
  • 如果两个引用,同时指向一个对象,那么通过一个引用,修改当前对象的值后,那么另一个引用也会受到影响,这种拷贝就叫浅拷贝

二维数组:

不规则的二维数组:

int[][] array=new int[3][];
array[0]=new int[2];
array[1]=new int[3];
array[2]=new int[4];
int[][] array1={{1},{3,4},{5,6}};
//for循环打印会发生数组越界异常
//打印二维数组
for(int i=0;i<array.length;i++){
    for(int j=0;j<array[i].length;j++){
        System.out.print(array[i][j]);
    }
}

Arrays工具类的使用

导入包java.util.Arrays;
alt+回车:自动导入包

  • 以字符串形式输出一维数组:
    Arrays.toString(int[] a)

  • 以字符串形式输出二维数组
    Arrays.deepToString(array)

  • 拷贝部分数组:
    int[] ret=Arrays.copyOfRange(int[] original, int from, int to);

  • 比较两个数的值
    Arrays.equals(int[] a, int[] a2);

int[] array={1,2,3,4};
int[] array1={1,2,3,4};
System.out.println(Arrays.equals(array,array1));//true
  • 二分查找
    Arrays.binarySearch(int[] a,int fromIndex,int toIndex,int key)
    左闭右开

  • 把整个数组全部填充成9
    Arrays.fill(array,9)

  • 从2号下标到7号下标填充成9
    Arrays.fill(array,2,7,9)

  • 对数组进行排序
    Arrays.sort(array)

Arrays.sort底层是什么排序?
快排

发布了67 篇原创文章 · 获赞 12 · 访问量 1531

猜你喜欢

转载自blog.csdn.net/qq_42174669/article/details/102640408