数组
数组介绍
- 数组是用来存储一组 相同数据类型 数据的数据结构
- 数组的元素可以是简单类型的数据,也可以是引用类型的数据
- 无论数组内容是减等类型还是引用类型,数组本身都是一种引用类型
- 每个数组元素都有下标,下标从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属性
-
打印数组元素 Array.toString
int[] a={1,2,3,4,5}; System.out.println(Arrays.toString(a));
数组作为参数和返回值
- 一维数组作为参数
- 传数组的引用
- 创建数组直接传,本质上也是传数组的引用
- 传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
-
数组的浅拷贝和深拷贝
-
数组浅拷贝
在堆内存中不会新分配出空间,而是新增一个引用变量和之前的引用指向相同的堆空间
-
数组深拷贝
在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新空间中
多维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一堆数组,其每一个元素都是一个一维数组
-
二维数组
int[][] a =new int[2][5]; int[][] b={{1,2},{3,4},{5,6},{7,8}};
以上二维数组a可以看成一个两行五列的数组
- 打印数组长度
System.out.println(b.length);//打印整个数组b的长度 System.out.println(b[0].length);//打印数组b中下标为0的长度,即{1,2}
4 2
- 打印二维数组元素
for (int i = 0; i <b.length ; i++) { for (int j = 0; j <b[i].length ; j++) { System.out.print(b[i][j]+" "); } }
Arrays类
- 数组的工具类java.util.Arrays
- Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”)
- 常用功能:
- 给数组赋值:通过fill方法
- 对数组排序:通过sort方法,按升序
- 比较数组:通过equals方法比较数组中元素值是否相等
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
int[] a = {1, 2, 3, 4, 5};
Arrays.sort(a); //数组进行排序:升序
Arrays.fill(a,0); //数组填充
冒泡排序
- 冒泡排序
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,就交换他们的位置
- 每一次比较,都会产生出一个最大,或者最小的数字
- 下一轮则可以少一次排序
- 依次循环,直到结束
public static int[] sort(int[] array){
int temp=0;//临时变量
//外层循环,判断我们这个要走多少次
for (int i = 0; i <array.length ; i++) {
//内层循环,比价判断两个数,如果第一个数比第二个数大,则交换位置
for (int j = 0; j <array.length-1 ; j++) {
if(array[j+1]>array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}