强哥说Java--Java 数组

简介: 强哥说Java--Java 数组

Java 数组



1. 什么是数组


数组是相同类型的数据按照顺序组成的一种引用数据类型。


Java 中有基本数据类型和引用数据类型两种数据类型。数组就是引用数据类型。


2. 数组声明


在Java语言中,数组声明有两种语法:


中括号跟在数据类型后:DataType[] arrayName;

中括号跟在数组名称后:DataType arrayName[];

其中DataType是数组中要存放元素的数据类型,例如int、String等,arrayName是数组名称,遵守变量的命名规范。


例如:


// 声明一个int类型的数组,名称为 firstIntArray:
int[] firstIntArray;  // 推荐写法
int firstIntArray[];
也可以修改数据类型,以生成其他类型的数组。实例如下:
// 声明一个float类型的数组:
float[] firstFloatArray;
// 声明一个字符串类型的数组:
String[] firstStringArray;


3. 数组创建


3.1 先声明再创建

int[] nums; //int nums2[];//1.声明数组
nums = new int [10];//2.创建一个数组
//3.给数组元素中赋值
nums[0]=1;
nums[1]=2;
nums[2]=3;
nums[3]=4;
nums[4]=5;
nums[5]=6;


3.2 声明时同时创建


//所创建的数组数据类型必须与其声明的数据类型相同。对于其他类型数组的创建
int[] b = new int[10];
//数组的创建使用new关键字,后面跟上一个空格+数据类型+中括号[],中括号中间是数组的长度,这里是必须指定的,它是一个整型的数字。实例如下:


4. 数组初始化


数组创建后,所有元素都初始化为默认值,整型数组的元素都为 0,浮点型都为 0. 0 ,布尔型都为 false。例如 int[] arr = new int[5];


语句创建了一个数组,它在结构可参考下图:


image.png


除了数组的默认初始化,还有另外两种常见形式:


4.1静态初始化


静态初始化数组,就是声明的同时,给数组赋值。


DataType[] arrayName = {元素1, 元素2, 元素3, 元素n};
int[] arr = {1, 2, 3, 4, 5};


4.2动态初始化


动态初始化数组,即数组的声明以及创建是与数组的赋值操作分开进行的。


// 声明并创建数组,长度为3
int[] arr = new int[3];
// 给下标位置0赋值为1
arr[0] = 1;
// 给下标位置1赋值为2
arr[1] = 2;
// 给下标位置2赋值为3
arr[2] = 3;


数组是有下标的,下标从0开始,因此长度为 3 的数组,最大下标为 2 。下图展示了上述代码的执行流程:


image.png


5. 数组的操作


5.1 数组元素的引用


语法:数组名[下标],下标从0开始。有一个整型数组,引用其第一个元素,实例如下:


package com.caq.array;
public class TestArray {
    public static void main(String[] args) {
        double a[] = {1, 2.4, 555.3, 7764.4};
        double total = 0;
        for (int i = 0; i < a.length; i++) {
            total = a[i];
            System.out.println(total);
        }
    }
}


5.2 数组元素的修改


public class ArrayDemo1 {
    public static void main(String[] args) {
        // 初始化整型数组arr:
        int [] arr = {1, 2, 3};
        // 修改下标为1的元素为4
        arr[1] = 4;
        System.out.println("数组arr中,第二个元素为:" + arr[1]);
    }


5.3 获取数组长度


我们可以使用数组的内置属性length来获取数组的长度,使用点操作符调用其内置属性:arrayName.length。实例如下:


package com.caq.array;
public class TestArray {
    public static void main(String[] args) {
        // 初始化整型数组arr:
        int[] arr = {1, 2, 3};
        // 打印数组arr的长度:
        System.out.println("数组arr的长度为:" + arr.length);
    }
}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKyM7c64-1629443265962)(E:\Typora\Image\image-20210817151902397.png)]


有时我们想引用数组中最后一个元素,由于数组下标从0开始,所以最后一个元素的下标为数组的长度减去1,这时可以结合length属性来进行引用。


package com.caq.array;public class TestArray {    public static void main(String[] args) {                // 初始化一个char类型的数组:        char[] charArr = {'q', 'w', 'e', 'r', 't'};        // 引用最后一个元素:        char lastElement = charArr[charArr.length - 1];        System.out.println("charArr数组的最后一个元素为:" + lastElement);            }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7SRqpdg-1629443265965)(E:\Typora\Image\image-20210817152151826.png)]


5.4 数组的迭代


5.4.1 循环赋值


package com.caq.array;public class TestArray {    public static void main(String[] args) {        int[] array1 = new int[10];        for (int i = 0; i < array1.length; i++) {            array1[i] = i + 1;            System.out.print(array1[i]+ "\t");        }    }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uuOTGV4-1629443265966)(E:\Typora\Image\image-20210817153054949.png)]


5.4.2 增强 for 循环


for(变量声明: 数组或列表) {    // 循环体}


public class TestArray {    public static void main(String[] args) {        // 初始化字符串数组 words        String[] words = {"a ", "b ", "c"};        for(String word: words) {            System.out.print(word);        }    }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYJZJfRW-1629443265967)(E:\Typora\Image\image-20210817153439546.png)]


5.4.3 数组实例


1.求100以内偶数的和


package com.caq.array;public class TestArray {    public static void main(String[] args) {        int total=0;        int[] words = new int[100];        for (int i = 0; i < words.length; i++) {            words[i] = i + 1;            if (words[i] % 2 == 0){                total += words[i];            }        }        System.out.println(total);    }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s79HI60Z-1629443265968)(E:\Typora\Image\image-20210817154203677.png)]


2.求数组内最大的数


package com.caq.array;public class TestArray {    public static void main(String[] args) {        int[] maxArray = {1,2,100,20,400,300};        int max = maxArray[0];        for (int i = 0; i < maxArray.length; i++) {            if (maxArray[i] > max){                max = maxArray[i];            }        }        System.out.println(max);    }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DWMLgW5Y-1629443265969)(E:\Typora\Image\image-20210817155230875.png)]


6. 多维数组


在Java中,多维数组也是非常常用的数据结构,下面以二维数组为例,介绍二维数组的声明、创建、初始化和引用。


6.1 声明


二维数组有 3 种声明方式:


中括号跟在数据类型后:DataType[][] arrayName;(最推荐写法)

中括号跟在数组名后:DataType arrayName[][];

中括号一个在前,一个在后:DataType[] arranName[];


// 声明一个整型的二维数组int[][] intArray;// 声明一个单精度浮点型的二维数组float floatArray[][];// 声明一个char类型的二维数组char[] charArray[];


6.2创建


二维数组可以想象成一个存放数据的表格,二维数组的创建和一维数组相似。可以声明数组的同时创建:


javaDataType[][] arrayName = new int[行数][列数];DataType[][] arrayName;arrayName = new DataType[行数][列数];


// 声明并创建一个2行3列的数组int[][] intArray = new int[2][3];// 声明一个单精度浮点型的二维数组float floatArray[][];// 创建一个3行3列的二维数组floatArray = new float[3][3];


在创建数组的时候,我们也可以先不指定列的数量,再在后面进行逐行创建。


实例:


// 创建一个3行的二维数组int intArray[][] = new int[3][];// 第一行3列intArray[0] = new int[3];// 第二行2列intArray[1] = new int[2];// 第三行1列intArray[2] = new int[1];


6.3 初始化


多维数组也有静态初始化和动态初始化之分,对于静态初始化,一维数组使用一对大括号{}包含其元素,而二维数组的初始化可以使用两对大括号包含行数和列数。实例如下:


// 创建一个3行2列的二维数组int[][] intArray = {{1,2}, {3,4}, {5,6}};代码块预览复制12


动态初始化实例如下:


// 声明并创建一个数组int intArray[][] = new int[2][3];// 为第1行第1列的元素赋值:intArray[0][0] = 10;代码块1234


Tips:为数组赋值时,要注意数组的下标索引是从0开始的。


一维数组可以通过length属性获取元素个数,同样二维数组的行数和列数也可以使用length属性获取。实例如下:


public class ArrayDemo6 {    public static void main(String[] args) {        // 初始化一个3行2列的二维数组        int[][] intArray = {{1,2,7}, {3,4}, {5,6}};        // 获取intArray的行数        System.out.println("intArray的行数为:" + intArray.length);        // 获取intArray第1行的列数        System.out.println("intArray第一行的列数为:" + intArray[0].length);    }}


6.4 二维数组的迭代


一维数组使用单层for循环就可以遍历,二维数组的遍历需要使用双层嵌套for循环。


package com.caq.array;public class ArrayDemo03 {    public static void main(String[] args) {        //多维数组        int[][] array = {{1, 2}, {2, 3}, {4, 5}};//二维        for (int i = 0; i < array.length; i++) {            for (int j = 0; j < array[i].length; j++) {                System.out.print(array[i][j] + "\t");            }        }    }}


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUAMOoIH-1629443265971)(E:\Typora\Image\image-20210817162524363.png)]


7. 小结


本小节我们学习了 Java 数组,知道了数组是引用数据类型。它在创建时,会在内存中开辟一个连续的空间;数组是同一数据类型的集合。可以使用数组下标来引用数组元素,数组元素的下标都是从0开始,使用下标不要超出范围,否则会抛出异常。可以使用length属性获取数组的长度。对于多维数组,实际开发中建议不要使用超过三维的数组,否则会让你的程序难以理解和维护。


相关文章
|
20天前
|
Java
环形数组链表(java)
环形数组链表(java)
10 0
|
14天前
|
存储 算法 搜索推荐
Java中的数组函数库及其使用技巧
Java中的数组函数库及其使用技巧
|
14天前
|
存储 Java 容器
Java数组的初始化方法
Java数组的初始化方法
|
13天前
|
存储 Java 索引
Java数组操作:基础与进阶指南
Java数组操作:基础与进阶指南
|
24天前
|
Java 编译器 API
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
|
6天前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
10 0
|
7天前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
14 0
|
14天前
|
Java 索引
解决Java中的数组越界异常的技术
解决Java中的数组越界异常的技术
|
14天前
|
Java
【Java】程序练习1(数组)
【Java】程序练习1(数组)
|
16天前
|
存储 算法 Java
Java中常用的数组函数及其应用场景
Java中常用的数组函数及其应用场景