Java 基础Java 数组方法极致精讲

Posted 敬 之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 基础Java 数组方法极致精讲相关的知识,希望对你有一定的参考价值。

Java 零基础入门到精通专栏持续更新中。通过本专栏你将学习到 Java 从入门进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。


订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java/大数据/Python/低代码/云原生 等全套视频课程,同时共同探讨问题、携手共进~


一、Java 数组详解

数组是一种数据类型(引用型),它是相同数据元素的集合,也就是说每一个数组中的元素的数据类型必须是相同的。在这里我们对数组的 声明初始化访问遍历复制排序 相关操作进行介绍。

1.1 声明数组

声明数组即定义数组变量,数组必须先经过声明后才能在程序中被使用,声明方式如下:

//声明整型数组a,包含10个元素,每个元素都是int类型,默认值为0
int[] a = new int[10];

//声明浮点型数组b,包含20个元素,每个元素都是double类型,默认值为0.0
double[] b = new double[20];

//声明布尔型数组c,包含30个元素,每个元素都是boolean类型,默认值为false
boolean[] c = new boolean[30];

1.2 初始化数组

数组的初始化其实就是为数组赋值。赋值方式有三种情况。

① 正常声明数组后会默认使用 默认值 为该数组赋值,如 int 型数组 a 如果不进行初始化的话默认赋值为 [0,0,0];

int[] a = new int[3]; //[0,0,0]

② 当数据元素比较少的时候,我们可以直接在声明数组的同时为其赋值,在大括号中输入值并用逗号隔开。但注意这种方式必须是声明的同时赋值,不可分开;

int[] a = 1,2,3; //[1,2,3]

③ 声明并赋值还有另一种写法是这样的,保留 new 关键字。与 ② 的区别是此写法可以将声明与赋值分开。

int[] b; //声明
b = new int[]1,2,3; //赋值[1,2,3]

1.3 访问数组

访问数组即如何去使用数组中的元素。当数组被声明和初始化之后,数组名.length 可获取数组长度,数组名[下标] 可获取数组中的某一个元素,下标从 0 开始,“数组名[0]”代表该数组的第一个元素,“数组名[2]”代表该数组的第三个元素。

int[] a = new int[3]; //[0,0,0]

System.out.println(a[0]); //输出数组a第一个元素的值
a[1] = 100; //赋值数组a的第二个元素为100
a[2] = 200; //赋值数组a的第三个元素为300
//a[3] = 300; //运行时会发生数组下标越界异常,
System.out.println(a[a.length-1]); //输出数组a最后一个元素的值

1.4 遍历数组

遍历也叫迭代,就是将数组中的所有元素从头到尾挨个走一遍。遍历需要使用到 for 循环。

int[] arr = new int[10];
for(int i=0;i<arr.length;i++) //遍历arr数组
    arr[i] = 100; //赋值数组的每一个元素为100
    System.out.println(arr[i]); //输出数组每一个元素的值

1.5 复制数组

复制数组的第一种方式是使用 arraycopy 关键字,格式为:

System.arraycopy(源数组,源数组的起始下标,目标数组,目标数组起始下标,要复制的元素个数);

如下,将数组 a(第二个元素开始后面的四个元素)复制到数组 b(第一个元素起始)。

public static void main(String[] args) 
    int[] a = 1,2,3,4,5;
    int[] b = new int[6]; //[0,0,0,0,0,0]
    //a 源数组
    //1 源数组的起始下标
    //b 目标数组
    //0 目标数组起始下标
    //4 要复制的元素个数
    System.arraycopy(a,1,b,0,4);

    for(int i=0;i<b.length;i++)
        System.out.println(b[i]); //[2,3,4,5,0,0]
    

复制数组的第二种方式是使用类 Arrays,格式为:

Arrays.copyOf(源数组,目标数组的长度);

在使用 Arrays 之前需要先引入;


如下将数组 a 复制到数组 b。注意一下如果目标数组的长度大于原数组,那么多出来元素将会以默认值赋值;如果目标数组的长度小于原数组,那么多余复制的元素将会被截掉。

public static void main(String[] args) 
    int[] a = 1,2,3,4,5;
    //a 源数组
    //6 目标数组的长度
    int[] b = Arrays.copyOf(a,6);
    for(int i=0;i< b.length;i++)
        System.out.println(b[i]); //[1,2,3,4,5,0] 第六个元素为多出来的元素,所以默认为0
    

1.6 排序数组

排序可以说是数组中最为常用的算法。使用 Arrays.sort(数组); 可对数组进行升序排列。如下是对一个包含 10 个随机数的数组升序排列。

public static void main(String[] args) 
    int[] arr = new int[10];
    for(int i=0;i< arr.length;i++)
        arr[i] = (int)(Math.random()*100);
        System.out.println(arr[i]);
    
    Arrays.sort(arr); //对数组升序排列
    System.out.println("升序后的数组为:");
    for(int i=0;i< arr.length;i++)
        System.out.println(arr[i]);
    

二、Java 方法详解

方法也称函数,用于封装一段特定的业务逻辑功能,减少代码的重复,有利于代码维护。通常在设计方法的过程中应尽量独立,也就是说尽量让它 只做一件事情 即可。

方法最明显的特征就是带 (),我们经常使用的 println()、Math.random()、arraycopy()、sort() 等等都是 Java 已经为我们封装好的方法。

2.1 定义方法

方法的定义一共需要包含包含五个要素:

要素含义
修饰词public static
返回值类型方法可以有返回值,也可以无返回值(依业务需求而定)
● 无返回值设计为 void
● 有返回值时设计为特定的数据类型即可
方法名方法名的命名规则应见名知义,且使用驼峰命名法
参数列表参数列表位于方法名后的括号中,格式为:方法名(参数列表)
方法可以无参,也可以有参,但有参可以使方法更加灵活
参数的书写方法和定义变量是一样的,如 int a,String b
方法体即业务逻辑的实现, 中的代码

方法的标准格式如下:

//标准格式
修饰词 返回值类型 方法名(参数列表)
    方法体


//最常见的标准方法就是主方法main
public static void main(String[] args) 
    ......

在方法的定义过程中,要注意每个方法之间都是 并列关系,主方法 main 是一个方法,我们自己定义的方法也是一个方法,所以自定义方法一定不能放到主方法 main 里面。而当调用自定义方法的时候就需要在 main 中调用了,因为“计算机只认主方法”。

//主方法main
public static void main(String[] args) 
    say(); //自定义方法在此调用

//自定义方法say
public static void say()
    System.out.println("大家好,我是敬 之!");

2.2 调用方法

方法可以被反复多次调用。针对有返回值和无返回值以及有无参数,调用方式稍有区别:

无参无返回值时,直接 方法名(); 调用;

//主方法main
public static void main(String[] args) 
    say(); //调用say


//自定义方法say(无参无返回值)
public static void say()
    System.out.println("大家好,我是敬 之!");

有参无返回值时,调用时必须传参,方法名(参数值);

补充:

  • 定义方法时的参数为形参
  • 调用方法时传入的参数为实参
//主方法main
public static void main(String[] args) 
    Hello("敬 之"); //调用Hello,有参必须传参且参数类型必须匹配


//自定义方法hello(有参无返回值)
public static void Hello(String name) //加入一个String类型的参数name
    System.out.println("大家好,我是"+name+"!");

有参无返回值,且多个参数时,方法名(参数值1,参数值2);

//主方法main
public static void main(String[] args) 
    Hello("敬 之",23); //调用Hello,有参必须传参且参数类型必须匹配,传两个参


//自定义方法hello(有参无返回值)
public static void Hello(String name,int age) //加入一个String类型的参数name和一个int类型的参数age
    System.out.println("大家好,我是"+name+",今年"+age+"岁!");

当无参有返回值的时候,方法中必须通过关键字 return 来返回一个数据,而且 return 返回的数据类型必须与返回值类型匹配。调用这种方法时需要声明一个对应类型的变量用于接收此方法。

//主方法main
public static void main(String[] args) 
    double a = getNum(); //声明一个double型变量来接收
    System.out.println(a); //3.1415


//自定义方法getNum(有返回值,返回值数据类型为double)
public static double getNum()
    return 3.1415; //return返回一个double型数据。此语句的含义为结束此方法的同时返回3.1415给调用方

有参有返回值时调用如下;

//主方法main
public static void main(String[] args) 
    int add = plus(4,5); //声明一个int型变量来接收
    System.out.println(add); //9


//自定义方法plus(有参有返回值)
public static int plus(int a,int b) //加入两个int型数据a和b
    int num = a+b;
    return num;

三、小案例

3.1 找出数组的最大值/最小值

首先声明一个包含 10 个元素的数组,将它们赋值为 0~99 的随机数。我们假设第一个元素为最大值 max,接下来遍历除第一个元素之外的剩余元素,让剩余元素一个一个的与当前设定的最大值 max 进行比较,如果大于 max,则将这个较大的值赋给 max,以此类推,知道将剩余元素全部比较完,最后输出的 max 就是整个数组的最大值。

public static void main(String[] args) 
    int[] arr = new int[10]; //声明数组arr
    for(int i=0;i<arr.length;i++) //遍历数组arr
        arr[i] = (int)(Math.random()*100); //为每个元素赋值0-99的随机数
        System.out.println(arr[i]); //输出每个元素的值
    
    int max = arr[0]; //假设第一个元素为最大值
    for(int i=1;i<arr.length;i++) //遍历除第一个元素之外的剩余元素
        if(arr[i]>max) //若剩余元素大于当前的max
            max = arr[i]; //则修改max为那个较大的值
        
    
    System.out.println("该数组中的最大值为"+max);

程序运行效果如下:

找最小值同理,相反操作即可。

3.2 创建一个方法,用于生成十个随机数的数组

//主方法main
public static void main(String[] args) 
    int[] arr1 = testArray(); //定义同类型的新数组arr1用于接收testArray方法传回来的数组
    System.out.println(arr1.length); //输出数组的长度
    System.out.println(arr1[2]); //输出数组的第三个元素


//自定义方法testArray(无参有返回值)
public static int[] testArray() //返回值类型为int数组
    int[] arr = new int[10];
    for(int i=0;i<arr.length;i++)
        arr[i] = (int)(Math.random()*100);
    
    return arr;

程序运行效果如下:

对于数组的灵活运用。精讲!

return 语句无非是精中之重,可以说学好返回值,就学好一大半数组

那就先回顾一下

  return 语句是 Java 语言中的跳转语句,主要作用:结束被调方法的执行,返回主调方法 ; 返回一个表达式的值 ; 返回值传递的过程其实就是一个赋值的过程,将 return 语句之后的表达式的值赋值给主调方法中用于接收返回值的变量。  方法可以没有返回值,也可以存在返回值,但最多只能存在一个返回值。   值类型变量里存放的时值本身,引用类型变量里存放的时地址。  当 参数是值类型时,形参和实参的取值是不同步的,当参数是引用类型时,形参和实参的取值是同步的。 一,请问?在 程序中,若要存储一位同学的 Java 课程的成绩,如何实现?

 若要存储三十位同学Java课程的成绩,如何实现?

这便是Java的数组

数组是一个变量,用于将相同数据类型的数据存储在内存空间中,数组中的所有元素必须属于相同的数据类型

Java中的数组

  在Java语言中,存在多种形式的数组

 

 

 

Java语言,一维数组的使用类似于变量的使用,分为以下4步骤

 声明数组

 创建数组

 初始化数组

 引用数组元素

声明数组

 声明数组是使用数组的第一步,需要说明数组元素的类型以及数组的名称

数据类型 [] 数组名 ; 或数据类型 数组名 [];

 初始化数组

 可通过以下三种方式为数组进行初始化

创建后初始化

创建时初始化

默认值初始化

Java中的数组JavaJava中的数组中的数组Java中的数组Java中的数组Java中的数组

以上是关于Java 基础Java 数组方法极致精讲的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList精讲(源码分析)---Java集合

ArrayList精讲(源码分析)---Java集合

干货精讲!java发送post请求url带参数

干货精讲!java发送post请求url带参数

操作猛如虎:他凭借“Java核心技能精讲”,竟收割了21个Offer

JAVA笔记(11)--- 精讲异常(附枚举);