目录
数组
数组:一个数据的集合,实际上是一个容器,用来存储固定大小的同类型元素
(属于引用数据类型,数据对象存储在堆内存当中,父类是Object)
注意:
(1)在java中,数组一旦创建,长度不可变
(2)Java中要求数组中的元素类型统一
(3)所有的数组对象都有length属性,用于获取数组中元素个数
(4)数组中不能直接存储java对象
(5)数组中的元素内存地址是连续的
(6)数组中第一个元素的内存地址作为整个数组对象的内存地址
数组的优点:查找元素效率高
数组的缺点:
①增加删除元素效率低
②不能存储大数据量,很难找到一块很大的连续内存空间
一维数组
定义,初始化一维数组
定义一维数组:
数据类型[] array;
静态初始化一维数组:
数据类型[] 数组名 = {数据元素};
public class 数组 { public static void main(String[] args) { //静态初始化int类型的数组 int[] array = {1,100,23,40}; //静态初始化String类型的数组 String[] array1 = {"a","b","c","asds"}; } }
动态初始化一维数组:
数据类型[] 数组名 = new 数据类型[元素个数]; //元素默认值为该数据类型的默认值
public class 数组 { public static void main(String[] args) { //动态初始化int类型数组 int[] array2 = new int[5]; //输出数组0,1下标的默认值 System.out.println(array2[0]); System.out.println(array2[1]); } }
一维数组赋值:
public class 数组 { public static void main(String[] args) { int[] array2 = new int[5]; //输出数组0,1下标的默认值 System.out.println(array2[0]); System.out.println(array2[1]); //给数组0下标元素赋值 array2[0] = 2; //给数组1下标元素赋值 array2[1] = 100; //重新输出数组0,1下标的元素值 System.out.println(array2[0]); System.out.println(array2[1]); } }
一维数组遍历
注意:不要直接输入数组,直接输出数组得到的是数组的内存地址
错误示例:
public class 数组 { public static void main(String[] args) { int[] array2 = new int[5]; //输出数组0,1下标的默认值 System.out.println(array2[0]); System.out.println(array2[1]); //给数组0下标元素赋值 array2[0] = 2; //给数组1下标元素赋值 array2[1] = 100; //重新输出数组0,1下标的元素值 System.out.println(array2[0]); System.out.println(array2[1]); //直接输出数组 System.out.println(array2); } }
使用for循环进行顺序遍历:
public class 数组 { public static void main(String[] args) { int[] array2 = new int[5]; //输出数组0,1下标的默认值 System.out.println(array2[0]); System.out.println(array2[1]); //给数组0下标元素赋值 array2[0] = 2; //给数组1下标元素赋值 array2[1] = 100; //重新输出数组0,1下标的元素值 System.out.println(array2[0]); System.out.println(array2[1]); //直接输出数组 System.out.println(array2); //使用for循环遍历 for (int i = 0 ; i<=array2.length-1 ; i++){ System.out.println(array2[i]); } } }
使用for循环进行倒序遍历:
public class 数组 { public static void main(String[] args) { int[] array2 = new int[5]; //输出数组0,1下标的默认值 System.out.println(array2[0]); System.out.println(array2[1]); //给数组0下标元素赋值 array2[0] = 2; //给数组1下标元素赋值 array2[1] = 100; //重新输出数组0,1下标的元素值 System.out.println(array2[0]); System.out.println(array2[1]); //直接输出数组 System.out.println(array2); //使用for进行顺序循环遍历 for (int i = 0 ; i<=array2.length-1 ; i++){ System.out.println(array2[i]); } //使用for循环进行倒序遍历 for (int i = array2.length-1; i >= 0 ; i-- ){ System.out.println(array2[i]); } } }
一维数组扩容
先新建一个大容量数组,再将小容量数组里的元素拷贝(拷贝的内存地址)到大数组中(数组扩容效率低)
System.arraycopy(需要拷贝的数组,需要拷贝的数组的初始拷贝位置,目标数组,目标数组起始位置,拷贝长度);
public class 一维数组扩容 { public static void main(String[] args) { int[] a = {1,2,4,5,6}; int[] b = new int[10]; //未拷贝前数组b的遍历 for(int i =0;i<=b.length-1;i++) { System.out.print(b[i]); } //换行 System.out.println(); //进行拷贝后数组b的遍历 System.arraycopy(a,0,b,0,5); for(int i =0;i<=b.length-1;i++){ System.out.print(b[i]); } } }
二维数组
定义,初始化二维数组
二维数组:二维数组实际上是一个特殊的一维数组,二维数组中的每一个元素都是一个一维数组
二维数组静态初始化:
数据类型[][] 数组名 = {{元素}};
public class 二维数组 { public static void main(String[] args) { //静态初始化一维数组a int[] a = {100,200,300}; //静态初始化二维数组b int [][] b = {{1,2},{3,4,5},{6,7,8,9}}; } }
二维数组动态初始化:
数据类型[][] 数组名 = new 数据类型[长度]
public class 二维数组 { public static void main(String[] args) { //静态初始化一维数组a int[] a = {100,200,300}; //静态初始化二维数组b int[][] b = {{1,2},{3,4,5},{6,7,8,9}}; //动态初始化二维数组c int[][] c = new int[3][4]; } }
二维数组遍历
二维数组顺序遍历:
public class 二维数组 { public static void main(String[] args) { //初始化二维数组b int [][] b = {{1,2},{3,4,5},{6,7,8,9}}; for( int i = 0; i<=b.length-1; i++){ for (int j = 0; j < b[i].length; j++) { System.out.print(b[i][j]); } //换行 System.out.println(); } } }
二维数组顺序遍历,但一维数组中的元素是倒序的:
public class 二维数组 { public static void main(String[] args) { //初始化一维数组a int[] a = {100,200,300}; //初始化二维数组b int [][] b = {{1,2},{3,4,5},{6,7,8,9}}; for( int i = 0; i<=b.length-1; i++){ for (int j = b[i].length-1; j >=0; j--) { System.out.print(b[i][j]); } System.out.println(); } }
对二维数组倒序遍历,但是一维数组的元素是正序的:
public class 二维数组 { public static void main(String[] args) { //初始化一维数组a int[] a = {100,200,300}; //初始化二维数组b int [][] b = {{1,2},{3,4,5},{6,7,8,9}}; for( int i =b.length-1; i>=0 ; i--){ for (int j = 0; j <=b[i].length-1; j++) { System.out.print(b[i][j]); } System.out.println(); } }
对二维数组倒序遍历,并且一维数组的元素也是倒序的:
public class 二维数组 { public static void main(String[] args) { //初始化一维数组a int[] a = {100,200,300}; //初始化二维数组b int [][] b = {{1,2},{3,4,5},{6,7,8,9}}; for( int i = b.length-1; i>=0; i--){ for (int j = b[i].length-1; j >=0; j--) { System.out.print(b[i][j]); } System.out.println(); } } }