注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。
两种数组定义时的特点个场景有什么区别
当前已经知道存入的元素值,用静态初始化
等前该不清楚要存入那些数据,用动态初始化
元素默认值规则:
基本类型 boolean false
引用类型 null
在Java 中的标签语句是放在迭代语句前面的;label: break 是结束多层循环,而continue 是让多层迭代变成死循环的。
数组内存图
数组使用常见问题
1.数组索引越界异常
2.空指针异常 (当数组名指向空地址时,访问相关内容是爆出错误)
当数组传值时要注意,数组是否有元素或者null ,这样会爆出空指针异常,这个和直接数组遍历是一样的,都是数组的局限性。
数组的拷贝是什么意思?
需要创建新数组,把原来数组的元素赋值过来。
数组的最后一个元素是 数组名.length -1 .
//增强循环,读取数组中的所有元素 for (int number : a) { System.out.println(number); }
Arrays这个类是一个工具类,多用于数组元素的排序问题,都是现成的可以直接使用。
方法名称 | 说明 |
---|---|
boolean equals(array1,array2) | 比较**array1和array2两个数组是否相等** |
sort(array) | 对数组**array的元素进行升序排列** |
String toString(array) | 将一个数组**array转换成一个字符串** |
void fill(array,val) | 把数组**array所有元素都赋值为val** |
copyOf(array,length) | 把数组**array复制成一个长度为length的新数组,返回类型与复制的数组一致** |
int binarySearch(array, val) | 查询元素值**val在数组array中的下标(要求数组中元素已经按升序排列)** |
//equals() 在这个Arrays工具类中是比较地址,两数组地址是不一样的 // 数组长度和数组元素都一样才是两个数组相等,这才是两个数组相等的关键 boolean b = Arrays.equals(age, number); System.out.println("\n"+ b); //将整形数组转换位字符数组 String string = Arrays.toString(age); System.out.println(string); //这字符串是从[]开始算下标的 char charAt = string.charAt(3); System.out.println(charAt); //将指定的数组都赋值到数组中 Arrays.fill(number,age.length); for (int i = 0; i < number.length; i++) { System.out.print(number[i] + " "); } System.out.println("\n------------------------------"); //将一个数组赋值到一个全新的数组中 int[] copy = Arrays.copyOf(age, age.length); for (int i = 0; i < copy.length; i++) { System.out.print(copy[i] + " "); } //没有找到这数就返回一个负数 Arrays.sort(age); int index = Arrays.binarySearch(age, age.length); System.out.println(index);
数组正序和逆序的交换算法有三种
/* 取中间数,有几次循环次数,奇偶条件都是一样的,循环次数是固定 */ // 奇数 取一半 列如七 3 0 1 2 3 4 5 6 正好循环三次,交换三次 // 偶数 取一半 列如八 4 0 1 2 3 4 5 6 7 交换四次 // 不管是偶数还是奇数都没有等于这个情况,等于的话就多交换一次 for (int i = 0,j=age.length -1; i < age.length / 2; i++,j--) { temper = age[i]; age[i] = age[j]; age[j] = temper; }
/* 主要考虑前后索引交换的次数 */ // 0 和 最后的最表比较 主要还是要看 判断条件 // i 是小数 j 是大数 i < j 的时候循环开始,i>J 的时候循环结束 // 0 7 循环条件一般都是取反,结束循环变成进入循环这么想就可以了 for (int i = 0, j = age.length - 1; i < j; i++, j--) { temper = age[i]; age[i] = age[j]; age[j] = temper; }
/* 两个数组,将一个数组赋值到另一个数组中 */ int[] age = {12, 34, 45, 56, 60, 71, 84, 99}; int[] temper = new int[age.length]; System.out.println("原来的数据:"); for (int i = 0; i < age.length; i++) { System.out.print(age[i] + " "); } System.out.println("\n交换后的数据:"); for (int i = 0, j = age.length - 1; i < age.length; i++ ,j--) { temper[j] = age[i]; } for (int i = 0; i < temper.length; i++) { System.out.print(temper[i] + " "); }
给数组插入一个元素
/* 先要把要插入的数据的下标遍历到, * 然后进入循环,以这个下标未结束条件 * 让这个元素后面的元素两两交换,前提是数组必须有足够的空间 * 循环条件按结束循环的条件取反就行了 * */