数组
数组的定义
相同类型的数据的有序集合
元素
数组中每一个数据叫数组的元素,可通过下标访问(从0开始)
数组的声明
dataType[] arrayRefvar;//首选方法
或者
dataType arrayRefvar[];//效果相同
数组的创建
dataType[] arrayRefvar = new dataType[size]//用new关键字来创建
数组的赋值
//创建后赋值,动态初始化,包含默认初始化
int[] a = new int[4];
a[0] = 0;
//创建时直接赋值,静态初始化
int[] a = {0,1,2};
数组的长度
int L = arrayRefvar.length;
数组的四个基本特点:
- 长度固定,一旦创建无法更改
- 数组元素类型必须相同
- 数组元素可以是任意类型,基本类型和引用类型都可以
- 数组可以看作是对象,数组的元素可以看作是数组对象的成员变量
拓展:
- 对象,通过new关键字创建,存储于堆中,因此数组对象本身是存储于堆中的。
- 成员变量和类变量的区别
成员变量和静态变量的区别:
1、成员变量所属于对象。所以也称为实例变量。
静态变量所属于类。所以也称为类变量。
2、成员变量存在于堆内存中。
静态变量存在于方法区中。
3、成员变量随着对象创建而存在。随着对象被回收而消失。
静态变量随着类的加载而存在。随着类的消失而消失。
4、成员变量只能被对象所调用 。
静态变量可以被对象调用,也可以被类名调用。
所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。
遍历数组
public class Demo09 {
public static void main(String[] args) {
int[] arr = {1,2,3};
//普通for循环,下标循环遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//增强for循环:for-each循环
for (int i : arr) {
System.out.println(i);
}
}
反转数组
//数组可作为入参
public static int[] reverse(int[] arr){
int[] res = new int[arr.length];//创建一个新数组接收原数组的元素
//反向接收元素
for (int i = 0, j =res.length-1; i < arr.length; i++,j--) {
res[j]=arr[i];
}
return res;//数组可作为返回值
}
数组工具类java.util.Arrays
常用功能
-
数组赋值:fill
import java.util.Arrays; public class Demo09 { public static void main(String[] args) { int[] a = {1,2,3,4,5}; Arrays.fill(a,0,2,6); System.out.println(Arrays.toString(a));//输出:[6, 6, 3, 4, 5] } }
-
数组排序:sort
import java.util.Arrays; public class Demo09 { public static void main(String[] args) { int[] a = {3,1,4,2,5}; Arrays.sort(a,0,2); System.out.println(Arrays.toString(a));//输出:[6, 6, 3, 4, 5],默认是升序 } }
-
元素比较:equals
public class Demo09 { public static void main(String[] args) { int[] a = {1,2,3}; int[] b = {1,2,3}; boolean res = Arrays.equals(a,b); System.out.println(res);//true } }
-
查找元素:binarySearch
import java.util.Arrays; public class Demo09 { public static void main(String[] args) { int[] a = {2,1,8,6}; Arrays.sort(a);//先对a排好序[1,2,6,8] int res = Arrays.binarySearch(a,6);//返回元素6的索引值 System.out.println(res);//索引为2 } }
稀疏数组
将包含许多0元素的数组转化为一个稀疏数组,达到压缩内存的目的。稀疏数组第一行记录原数组的行数、列数和非0值个数,第二行开始记录非0值元素在原数组中的位置信息和具体值。
{0,1,0} {3,3,3}
{2,0,0} ====== {0,1,1}
{0,3,0} {1,0,2}
{2,1,3}