目录
基础
一、创建与使用
二、数组长度
三、访问数组中的元素
四、数组越界异常
1、负数下标
2、数组下标超过数组长度
五、空指针异常
六、遍历数组
1、for循环
2、for each:增强for循环
3、借助Java中操作数组的工具类 Arrays
JVM(Java虚拟机)
实例
一、数组作为方法及返回值
1、修改数组某一元素
2、使数组每个元素*2
二、fill(填充)用法
三、数组交换
四、数组拷贝--拷贝会产生新的对象
1、for循环遍历
2、Arrays.copyof 以及 Arrays.copyOfRange
3、clone--产生一个副本
4、深拷贝 & 浅拷贝
五、数组查找
1、顺序查找
2、二分查找
六、数组排序
1、冒泡排序
二维数组
一、二维数组的打印
1、循环嵌套
2、foreach:先用int[]循环数组,再用int循环每个数组中的内容
3、Arrays.deepToString(array)
二、二维数组的特殊形式
1、Java中二维数组的定义可以省略列,不能省略行
2、不规则的二维数组
思维导图
基础
一、创建与使用
//定义数组时,不能写具体的数字 int[10] arr={}; 是错的 int[] array2=new int[3]; //new是Java的一个关键字,用来实例化一个对象,意味着Java中的一个数组也是一个对象 //大小为3,里面的每个元素为0 int[] array={1,2,3,4,5,6,7};//虽然没写new,实际上也是一个对象 int[] array3=new int[]{1,2,3,4,5};//new int[] 中括号里面不能写数字
二、数组长度
System.out.println(array.length);
三、访问数组中的元素
System.out.println(array[3]);
四、数组越界异常
1、负数下标
2、数组下标超过数组长度
五、空指针异常
int[] array2=null; System.out.println(array2.length);
int[] array2=null; System.out.println(array2[0]);
以上两段代码均为空指针异常
注意:在写数组函数时,要考虑 null 和 array.length==0 的情况
六、遍历数组
1、for循环
public static void main(String[] args) { int[] array={1,2,3,4,5,6,7,8,9,10}; for(int i=0;i<10;i++){ System.out.print(array[i]+" "); } System.out.println(); }
2、for each:增强for循环
for (int x : array) {//for each,定义一个x接收元素 System.out.print(x+" "); } System.out.println();
区别:for循环是可以拿到下标 的;for each是拿不到下标的,更多用于集合中
3、借助Java中操作数组的工具类 Arrays
JVM(Java虚拟机)
内存分为五个区
注意:
1、对象在堆上,局部变量放在栈上;
2、引用不一定是在栈上,在不在栈上由变量性质决定——局部变量一定在栈上,实例成员变量不一定在栈上
3、一个引用可以理解成一个变量,存放地址;一个引用只能保存一个对象的地址
4、引用只能指向对象
实例
一、数组作为方法及返回值
1、修改数组某一元素
数组传参时传的是地址,要分清改的是形参还是实参
2、使数组每个元素*2
public static int[] transform(int[] array){ int[] ret=new int[array.length]; for (int i = 0; i < array.length; i++) { ret[i]=2*array[i]; } return ret; } public static void main(String[] args) { int[] array={1,2,3,4,5}; int[] ret=transform(array); System.out.println(Arrays.toString(ret)); System.out.println(Arrays.toString(array)); System.out.println(Arrays.toString(transform(array))); }
二、fill(填充)用法
三、数组交换
public static void swap(int[] array){ int tmp=array[0]; array[0]=array[1]; array[1]=tmp; } public static void main(String[] args) { int[] array={10,20}; System.out.println("交换前:"+array[0]+" "+array[1]); swap(array); System.out.println("交换后:"+array[0]+" "+array[1]); }
四、数组拷贝--拷贝会产生新的对象
1、for循环遍历
public static int[] copyArray1(int[] array){ int[] copy=new int[array.length]; for(int i=0;i< array.length;i++){ copy[i]=array[i]; } return copy; } public static void main(String[] args) { int[] array={1,22,3,4,5,6,45}; int[] ret=copyArray1(array); System.out.println(Arrays.toString(ret)); }
2、Arrays.copyof 以及 Arrays.copyOfRange
Arrays.copyof可以拓展数组长度
Arrays.copyOfRange可以拷贝具体范围内的数组,Java中一般左闭右开
public static void main(String[] args) { int[] array={1,2,3,4,5,6,7}; int[] ret=Arrays.copyOf(array,array.length*2); System.out.println(Arrays.toString(ret)); int[] ret2=Arrays.copyOfRange(array,1,3); //Java中看见from和to依旧是左闭右开 System.out.println(Arrays.toString(ret2)); }
3、clone--产生一个副本
int[] copy=array.clone(); System.out.println(Arrays.toString(copy));
4、深拷贝 & 浅拷贝
深拷贝:拷贝完成之后,通过一个引用去访问和修改时,不会影响原来的内容
浅拷贝:拷贝完成之后,通过一个引用去访问和修改时,会影响原来的内容
五、数组查找
1、顺序查找
for循环,缺点:当数组中数据很多且查找最后一个数字时,循环次数太多
2、二分查找
前提,数组一定要是从大到小或者从小到大的有序数组
六、数组排序
1、冒泡排序
public static void bubbleSort(int[] array){ for (int i = 0; i < array.length-1; i++) {//第i次交换 boolean flg=false; for (int j = 0; j < array.length-1-i; j++) {//交换次数 if(array[j]>array[j+1]){ int tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; flg=true; } } if(flg==false)return; } } public static void main(String[] args) { int[] array={5,10,6,3,9}; bubbleSort(array); System.out.println(Arrays.toString(array)); }
二维数组
Java中的二维数组是特殊的一维数组
一、二维数组的打印
1、循环嵌套
int[][] array={{1,2,3},{4,5,6}}; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]+" "); } System.out.println(); }
2、foreach:先用int[]循环数组,再用int循环每个数组中的内容
for (int[] ret:array) { for (int x:ret) { System.out.print(x+" "); } System.out.println(); }
3、Arrays.deepToString(array)
System.out.println(Arrays.deepToString(array));
二、二维数组的特殊形式
int[][] array1={{1,2},{3,4,5}}; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { System.out.print(array1[i][j]+" "); } System.out.println(); }
1、Java中二维数组的定义可以省略列,不能省略行
int[][] array2=new int[2][]; for (int i = 0; i < array2.length; i++) { for (int j = 0; j < array2[i].length; j++) { System.out.print(array2[i][j]+" "); } System.out.println(); }
在打印的时候 array2[i].length 实际上是在使用 null.length,出现异常
改成下面这种形式可以避免报错
2、不规则的二维数组
int[][] array3=new int[2][]; array3[0]=new int[2]; array3[1]=new int[3]; for (int i = 0; i < array3.length; i++) { for (int j = 0; j < array3[i].length; j++) { System.out.print(array3[i][j]+" "); } System.out.println(); }
思维导图
如有错误 请多指教!