一:数组的基本知识
1.数组属于引用变量类型变量,数组的元素可以是引用数据类型也可以是基本数据类型.
2.数组是连续的一组地址空间 数组的长度一旦确定,就不能修改
3.数组元素的默认初始化值:
数组元素是整形:0
数组元素是浮点型:0
数组元素是char类型:0或'\u0000',而非'0'
数组元素是boolean类型 : false
数组元素是引用数据类型: null
二:初始化一维数组
1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] ids; //声明
ids = new int[] {1001,1002,1003,1004};//
1.2动态初始化:只对数组进行初始化,并未对其赋值
String[] names = new String[5]; //只对数组进行初始化,并未对其赋值
总结:数组一旦初始化完成,其长度就确定了
三:二维数组的初始化以及遍历
public static void main(String[] args) {
//静态初始化
int[][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//若想引用arr3[1][0],需要对arr3[1]分配内存空间
arr3[1] = new String[4];//相当于对数组内部分配了内存空间.
//获取数组的长度,不考虑其内部数据类型.
System.out.println(arr1.length);
//如何遍历二维数组
for(int i = 0; i< arr1.length;i++) {
for(int j = 0; j < arr1[i].length;j++) {
System.out.print(arr1[i][j]);
}
System.out.println();
}
//总结
/* 二维数组的使用:
* 规定:二位数组分为外层数组元素和内层数组元素
* int[][] arr = new int[4][3];
* 外层元素: arr[0],arr[1];
* 内层元素:arr[0][0],arr[1][2];
*
* 数组元素的默认初始化值
* 方式一: int[][] arr = new int[4][3];
* 外层元素的初始化值为:地址值
* 内层元素的初始化值为:与一维数组初始化情况相同
*
* 对于初始化方式二:比如 int[][] arr = new int[4][];
* 外层元素的初始化值为:null ,内层为数组是引用类型,所以为null。
* 内层元素的初始化值为:不能调用
*
* 数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
*
* 数据的存储结构: 线性表:顺序表、链表、栈、队列、
* 非线性表:树形结构,二叉树,图形结构
*
*
*
*
*
* */
四:数组中常用的工具类
public class ArrayTools {
public static void main(String[] args) {
//1.boolean equals(int[] a,int[] b):判断两个数组是否相等
int[] arr1 = new int[] {1,2,34,4};
int[] arr2 = new int[] {1,3,2,4,30,19,-10,20,1098};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
//String toString(int[] a):输出数组信息
System.out.println(Arrays.toString(arr2));
//void fill(int[] a,int val):将指定值填充到数组中
Arrays.fill(arr1, 10);
System.out.println(Arrays.toString(arr1));
//void sort(int[] a):对数组进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//int binarySearch(int[] a,int key) :二分查找,只能适用排序好的数组
int index = Arrays.binarySearch(arr2, 20);
System.out.println(index);
if(index >= 0) {
System.out.println("找到了");
}else {
System.out.println("没有找到");
}
}
}
五:补充break和continue的用法
break :使用范围 switch-case语句和循环语句中, 功能:结束当前循环,默认跳出包裹此关键字最近的一层循环。
continue : 用在循环结构中, 功能 : 结束当次循环。
public static void main(String [] args) {
/* for(int i = 1;i <= 10; i++) {
if(i % 4 == 0) {
//break; 结果为123
continue; //12356910
}
System.out.print(i);
}*/
label: for(int i = 1; i <= 4;i++) { //加个标签
for(int j = 1; j <= 10; j++) {
if(j % 4 ==0) {
//break label; //结束指定标识的一层循环结构 ,没有label的话执行结果为123123123123,结束最近的一层循环
continue label; //结束指定标识的一层循环结构当次循环。不加标签的话结果
//123567910123567910123567910123567910
}
System.out.print(j);
}
}
}