数组
数组介绍
- 数组是用来存储一组**相同数据类型**数据的数据结构
- 数组的元素可以是简单类型的数据,也可以是引用类型的数据
- 无论数组内容是减等类型还是引用类型,数组本身都是一种引用类型
- 每个数组元素都有下标,下标从0开始
数组的创建
-
数组定义方式有两种:
数据类型[] 数组名字; 数据类型 数组名字[];
-
在数组定义中,不能指定数组的长度,而需在数组的创建阶段来指定
int[] a; a=new int[3]; String[] b=new String[5];
-
赋值
- 通过元素下标赋值
- 通过for循环赋值
for(int i=0;i<a.length;i++){ a[i]=i+100; }
-
数组初始化
- 数组的动态初始化
//数组的动态初始化 public void m2(){ //1、声明变量 int[] a; //2、为数组创建大小 a=new int[3]; //3、为数组元素赋值 a[0]=100; a[1]=200; a[3]=300; }
- 数组的静态初始化
//数组的静态初始化:数组创建时就赋值 public void m3(){ int[] a={1,2,3,4,5}; int[] b=new int[]{10,20,30};//在[]中不能指定数组的大小 }
-
通过下标可访问一维数组中的元素
-
一维数组的长度,使用length属性
数组作为参数和返回值
- 一维数组作为参数
- 传数组的引用
- 创建数组直接传,本质上也是传数组的引用
- 传null
- 一维数组作为返回值
- 返回数组的引用
- 直接创建一个数组返回,本质上是返回数组的引用
- 返回null
数组的遍历
-
一维数组的遍历
- for循环遍历
for(表达式1;表达式2;表达式3){ 循环体 }
-
表达式1:声明一个变量并初始化
-
表达式2:循环条件判断
-
表达式3:修整变量
- foreach遍历
for(数据类型 变量x : 遍历对象obj){ 引用了x的语句 }
-
数据类型:表示的是数组中元素的类型
-
x:表示数组中的每一个元素的值
-
obj:表示的是遍历的数组对象
(每一个foreach语句都能更改为for循环,但并不是所有的for循环都能更改为foreach语句
int[] a = {1, 2, 3, 4, 5};
//for循环遍历
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
//foreach遍历
for(int x : a ){
System.out.println(x);
}
数组的排序
- 使用Array.sort()对数组排序
- 实用于数值型数组byte,char,short,int,long,float,double
- 实用于String型数组(看首字母排序)
Java可变参数
-
可变参数与数组作为方法参数时的区别
-
从个数来看:可变参数只能有一个,数组可以有多个
-
从定义位置来看:可变参数只能定义在参数列表的末尾,数组可以在任意位置
show( String s , char c , int… a )
show( int[] a , String s , char[] c )
-
从传参的形式来看:
(1)可变参数可以传数组、0个参数、1到多个参数
(2)数组可以传数组引用、数组对象、null
-
数组的浅拷贝和深拷贝
-
数组浅拷贝
在堆内存中不会新分配出空间,而是新增一个引用变量和之前的引用指向相同的堆空间
-
数组深拷贝
在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新空间中