强哥说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属性获取数组的长度。对于多维数组,实际开发中建议不要使用超过三维的数组,否则会让你的程序难以理解和维护。


相关文章
|
3月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
2月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
4月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
94 0
|
6月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
|
10月前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
8月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
463 1
Java 中数组Array和列表List的转换
|
8月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
152 23
|
8月前
|
存储 Java 索引
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
|
7月前
|
存储 Java 数据挖掘
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
276 0
下一篇
开通oss服务