浅谈Java当作数组的几个应用场景
作者:念君思宁
前言
对于数组,在C语言中就有过学习,但是,并没有怎么进行总结过,所以,笔者在Java中,对数组的几个简单的应用场景进行总结一下:
1.保存数据
public static void main(String[] args) { int[] array = {1, 2, 3}; for(int i = 0; i < array.length; ++i){ System.out.println(array[i] + " "); } }
代码的运行结果为:
2.. 参数传基本数据类型
public static void main(String[] args) { int num = 0; func(num); System.out.println("num = " + num); } public static void func(int x) { x = 10; System.out.println("x = " + x); }
代码的运行结果为:
发现在func方法中修改形参 x 的值, 不影响实参的 num 值.
3.. 参数传数组类型(引用数据类型)
public static void main(String[] args) { int[] arr = {1, 2, 3}; func(arr); System.out.println("arr[0] = " + arr[0]); } public static void func(int[] a) { a[0] = 10; System.out.println("a[0] = " + a[0]); }
代码的运行结果为:
发现在func方法内部修改数组的内容, 方法外部的数组内容也发生改变. 因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。
总结: 所谓的 "引用" 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实 只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).
4. 作为函数的返回值
比如:获取斐波那契数列的前N项
public class Main { public static int[] fib(int n){ if(n <= 0){ return null; } int[] array = new int[n]; array[0] = array[1] = 1; for(int i = 2; i < n; ++i){ array[i] = array[i-1] + array[i-2]; } return array; } public static void main(String[] args) { int[] array = fib(10); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }
代码的运行结果为:
拓展讲解:
1.作为函数的返回值部分:
public static void func1(int[] array) { array=new int[]{15,16,17}; } public static void func2(int[] array) { array[0]=99; } public static void main(String[] args) { int[] array1={1,2,3,4}; func1(array1); //打印结果: [1,2,3,4] // func2(array1); //打印结果: [99,2,3,4] }
在上述代码中:对func1进行分析:
形参的改变,不会影响实参!!
在上述代码中:func1仅仅是改变了形参的指向,并没有影响的实参!
对func2进行分析:
在func2函数中,传递的是引用,我们可以通过引用来改变原来的值!!
总结一下:
当数组作为参数进行传递的时候,其实还是按值传递的,此时的值是一个地址!!那么就会出现两种情况:
情况1:形参修改指向,array=new int[10]; 只会影响形参的指向!
比如:
public static void func1(int[] array) { array=new int[]{15,16,17}; } public static void main(String[] args) { int[] array1={1,2,3,4}; func1(array1); //打印结果: [1,2,3,4] }
情况2:形参修改指向对象的值: array[0]=99,此时才会影响到实参!
public static void func2(int[] array) { array[0]=99; } public static void main(String[] args) { int[] array1={1,2,3,4}; // func2(array1); //打印结果: [99,2,3,4] }
2.数组作为函数的返回值!
public static int[] func10() { int[] tmpArr={11,22,33}; return tmpArr; } public static void main(String[] args) { int[] array=func10(); System.out.println(Arrays.toString(array)); //[11,22,33] }
上述代码的运行结果为:
画图分析为:
解析:tmpArr 是在函数里面创建的局部变量!当遇见return 的时候,这个方法就结束了,那么tmpArr 就会被回收掉了(销毁),那么,就意味着,tmpArr把值传递给array后,就被回收了!!
3.方法内部接收数组,并且返回数组!
public static int[] grow(int[] array) { for (int i = 0; i < array.length; i++) { array[i]=array[i]*2; } return array; } public static void main(String[] args) { int[] array={1,2,3,4,5,6,7,8}; int[] ret=grow(array); System.out.println(Arrays.toString(array)); //[2, 4, 6, 8, 10, 12, 14, 16] System.out.println(Arrays.toString(ret)); //[2, 4, 6, 8, 10, 12, 14, 16] }
上述代码的运行结果为:
画图解析一下:
但是,另外一种写法: 我们需要简单思考一下哟!!
public static int[] grow(int[] array) { int[] tmpArray =new int[array.length];//java支持这种数组的创建!!里面可以是变量! for (int i = 0; i < array.length; i++) { tmpArray[i]=array[i]*2; } return tmpArray; } public static void main(String[] args) { int[] array={1,2,3,4,5,6,7,8}; int[] ret=grow(array); System.out.println(Arrays.toString(array)); //[1, 2, 3, 4, 5, 6, 7, 8] System.out.println(Arrays.toString(ret)); //[2, 4, 6, 8, 10, 12, 14, 16] }
代码的运行结果为:
画图解析为:
总结
到此这篇关于Java当作数组的几个应用场景的文章就介绍到这了,更多相关Java数组应用场景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Java数组(Array)最全汇总(中篇)
- Java数组(Array)最全汇总(上篇)
- Java之数组在指定位置插入元素实现
- Java自定义一个变长数组的思路与代码
- Java中如何将 int[] 数组转换为 ArrayList(list)
- Java中将 int[] 数组 转换为 List分享
- java如何将int数组转化为Integer数组
- 计算Java数组长度函数的方法以及代码分析
- Java C++题解leetcode915分割数组示例
- Java 从json提取数组并转换为list的操作方法
- Java数据结构之稀疏数组的实现与应用
- Java C++题解leetcode1441用栈操作构建数组示例
- Java postgresql数组字段类型处理方法详解
- Java中数组的常见操作合集
- 关于Java SE数组的深入理解
- Java二维数组与稀疏数组相互转换实现详解
- Java数组队列及环形数组队列超详细讲解
- Java数组(Array)最全汇总(下篇)