数组
数组可以存放多个同一类型的数据,数据也是一种数据类型,是引用类型。即:数组就是一组数据。
array.length => 数组长度
- 动态初始化
int a[] = new int [5];
- 动态初始化
int a[];
//或者
int[] a;
a = new int [10];
- 静态初始化
int a[] = { 1,2,3,4,5,6,7,8,9 };
相当于先new再赋值
注意事项和细节:
-
数组是多个相同类型数据的组合,实现对这些数据的统一管理(类型自动转换也可以,int->double)
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
-
数组创建后,如果没有赋值,有默认值;
int/short/byte/long: 0
float/double: 0.0
char: \u0000
boolean: false
String: null
-
使用步骤:声明,赋值,使用
-
数组的下标是从0开始
-
数组下标必须在指定范围内使用,否则报:下标越界异常
-
数组属于引用类型,数组型数据是对象
数组赋值机制:
-
基本数据类型赋值,这个值就是具体的数据,而且相互不影响(值拷贝)
-
数组在默认情况下是引用传递,赋的值是地址 (引用传达)
int [] a1 = {1,2,3};
int[] a2 = a1;
改变数组a2的值也会改变a1
jvm内存:
- 栈
- 堆
- 方法区
数组逐值拷贝
int [] a1 = {1,2,3};
int[] a2 = new int [a1.length];
用for循环逐个赋值
数组扩容
声明一个新数组,再赋值各元素的值,效率极低
排序
内部排序和外部排序
冒泡排序法
查找
顺序
二分
二维数组
int[][] [] [] arr = { { },{ } } ;
相当于一个数组元素是一维数组的一维数组
arr.length = 二维数组的行数
arr[i].length = 二维数组的列数
- 动态初始化
int[] [] arr = new int [10] [10];
- 动态初始化
int[] [] arr ;
arr = new int [10] [10];
-
列数不确定
每一行的元素个数可以不一样
int[] [] arr = new int [10] [];
//二维数组有三个一维数组的元素,但是一维数组还没有开空间
for( int i = 0; i < arr.length ; i++){
arr[i] = new int [i + 1];
//给每个一维数组开空间,如果没开,那么arr[i]就是null
for( int j = 0;j< arr[i].length;j++){
arr[i] [j] = i + 1; //赋值
}
}
- 静态初始化
int[] [] arr = { { 1,2,3},{ 4,5 }, { 6 } };
二维数组细节
- 一维数组声明 int[] x 或者 int x[]
- 二维数组声明 int[] [] x 或者 int [] y[] 或者 int y[] []
- 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同也可以不同,不同的话叫做列数不等的二维数组
练习题
-
01010
-
blue
-
1
3
5
7
-
a,a
z,z
韩,韩
c,c