一. 数组概述
二. 数组的优点和缺点
总结:以int为例,局部变量表知道0索引得地址,数组存储得数据类型都是同类型的,int每个占四个字节,计算机通过计算能够得到所需要的地址,很方便。
时间复杂度为O(1),1代表固定不变,因为数组在寻找的是通过计算得出的位置,可以理解为一个公式计算。
三. 一维数组
静态初始化数组
for each循环
增强for循坏/for-each循坏。JDK5的新特性:
for each语法结构:
for(数据中元素的数据类型 变量名:数组名){}
注意:变量名代表数组中的每个元素for(int num:arr){}
动态初始化数组
四. 相关问题
②一维数组存储引用时的内存图
⑥main函数
1.作用:接收命令行参数用的。
2.JVM负责调用ArrayTest.main()方法。
JVM给main方法准备一个String[ ]一维数组的对象。
3.java ArrayTest abc def xyz
底层JVM是怎么做的?
命令行参数:"abc def xyz"
JVM会将以上字符串以“空格”进行拆分,生成一个新的数组对象
最后这个数组对象是:string[]args={"abc","def","xyz"};
4.命令行参数有什么用?(基于dos黑窗口的用户和密码输入,例如mysql黑窗口登录)
需求:使用该系统的时候,需要提高正确的用户名和密码
如果用户名admin,并且密码是admin123,则表示是合法的,其他用户是非法的。
public class ArrayTest { public static void main(String[] args) { System.out.println(args); //[Ljava.lang.String;@b4c966a(JVM给创建的数组对象。) System.out.println(args.length); //结果为 0 } }
这个main方法是自己负责写,JVM负责调用。
----------------------------------------------------------------------------
运行结果:
⑦方法的可变长参数
public static void mi(int...num){}
1.数组的长度一旦确定不可变。
2、如果数组满了,想存储更多的数据,只能创建一个新的数组,将原数组中的数据全部拷贝到新数组当中。这样就可以完成扩容了。
3.怎么优化?建议减少扩容次数。建议预测数据量,创建一个容量差不多的数组。
4.扩容的时候需要使用到数组的拷贝?怎么拷贝?
System.arraycopy()
五. 二维数组
二维数组是数组中存的是一个数组的内存地址,无限套娃
package com.baidu.com.jia.Day401;
/**
二维数组的动态初始化:
等长
int[][] arr = new int[3][4]
不等长
int[][] arr = new int[3][]
**/
public class ArrayTest {
public static void main(String[] args) {
//二维数组的静态初始化
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
System.out.println(arr[0].length);//{1,2,3}它的长度为3
//二维数组动态初始化
//等长
int[][] arr1 = new int[3][4];
//遍历
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.println(arr1[i][j] + " ");
}
//换行
System.out.println();
}
//不等长
int[][] num = new int[3][];
num[0] = new int[]{1,2,3};
num[1] = new int[]{4,5,6};
num[2] = new int[]{7,8,9};
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++) {
System.out.println(num[i][j] + " ");
}
System.out.println();
}
}
}