day12
数组
数组的扩容
第一种方式
创建数组的时候,必须要指定长度,因为数字在内存中是连续存放
一旦设置了数组的长度,其长度无法更改
这就牵扯数组的扩容
思路:
创建一个新的长度大于原数组的数组
将原数组的中的每一个元素依次复制到新数组中去
package com.saas; public class Array01 { public static void main(String[] args) { int[] old = {12, 22, 11, 3443, 56, 1}; System.out.println(old.length); old[3] = 33; for (int i = 0; i < old.length; i++) { int i1 = old[i]; System.out.println(i1); } old[-1] = 66; } }数组长度一旦声明,则下标将会从0-数字长度减一
一旦你所访问的下标超出【0-length-1】则会出现数组下标索引越界异常
package com.saas; public class Array02 { public static void main(String[] args) { int[] old = {12, 22, 11, 3443, 56, 1}; System.out.println(old.length); old[3] = 33; for (int i = 0; i < old.length; i++) { int i1 = old[i]; System.out.println(i1); } System.out.println("=================="); int[] newArray = new int[10]; // newArray[0] = 10; for (int i = 0; i < old.length; i++) { newArray[i] = old[i]; System.out.println(newArray[i]); } } }声明一个新的长度更大的数组,将原数组中的每一个元素依次复制到新数组中
后面的空间可以继续使用
第二种方式
使用java写好的System类中的arraycopy方法完成数组内容的拷贝
package com.saas; public class Array03 { public static void main(String[] args) { int[] oldArr = {12, 22, 11, 3443, 56, 1}; int[] newArr = new int[10]; /** * System.arraycopy()方法是java给我们提供的一个系统的数组拷贝功能方法 * 里面包含五个参数: * 1. 源数组,要拷贝的数组 * 2. 源数组的起始位置,从该位置开始拷贝 * 3. 目标数组,要扩容之后的新数组 * 4. 目标数组的起始位置,在新数组的该位置开始拷贝 * 5. 要拷贝的元素个数 * * 注意该方法可能会出现数据下标越界异常 */ System.arraycopy(oldArr, 0, newArr, 9, 6); for (int i = 0; i < newArr.length; i++) { int i1 = newArr[i]; System.out.println(i1); } } }
第三种方式
使用java写好的Arrays类中的copyOf方法完成数组内容的截取、复制和扩容
package com.saas; import java.util.Arrays; public class Array04 { public static void main(String[] args) { int[] oldArr = {12, 22, 11, 3443, 56, 1}; /* Arrays类中有一个copyOf方法,可以很方便地实现数组的截取、复制和扩容 该方法包含两个参数: 1. 源数组 2. 要拷贝的长度 如果长度小于源数组的长度,则实现截取功能 如果长度等于源数组的长度,则实现数组的拷贝 如果长度大于源数组的长度,则实现数组的扩容 */ int[] newArr = Arrays.copyOf(oldArr, 10); for (int i = 0; i < newArr.length; i++) { int i1 = newArr[i]; System.out.println(i1); } } }