Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)

news2024/10/5 13:41:51

        前言:数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同,Java 语言中提供的数组是用来存储固定大小的同类型元素。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

先让我们看一下本篇文章的大致内容:

目录

1.数组的定义与创建

        (1)数组的定义

        (2)数组的创建及初始化

补充:

        (1)数组的创建及初始化的分离

        (2)数组不进行初始化时会有默认值

2.数组的遍历

        (1)使用for循环

        (2)使用增强for循环

        (3)使用Array.toString方法

3.数组中常用的API

        (1)binarySearch

        (2)copyOf

        (3)copyOfRange

        (4)equals

        (5)fill

        (6)sort

        (7)toString

4.二维数组

        (1)二维数组的定义

        (2)二维数组的遍历

        【1】使用for循环

        【2】使用增强for循环

        【3】使用Array.deepToString方法


1.数组的定义与创建

        从前言中我们可以知道数组可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。那么数组是如何定义的呢?

        (1)数组的定义

数组的定义如下:

T[] 数组名 = new T[N] ;

其中:

        T:表示数组中存放元素的类型。
        T[ ]:表示数组的类型。
        N:表示数组的长度。

看了上边数组的定义之后还是不太懂到底数组是如何定义的,那么可以看一下下面的案例进一步理解。

int[] array1 = new int[10]; // 一个可以容纳10个int类型元素的数组

double[] array2 = new double[5]; // 一个可以容纳5个double类型元素的数组

String[] array3 = new double[3]; // 一个可以容纳3个字符串元素的数组

这样我们就大致了解了数组的定义形式了,那么数组又该如何去进行创建呢?

        (2)数组的创建及初始化

对于数组的创建及初始化大致可以分为两种:动态初始化静态初始化

先来看一下动态创建及初始化:

        动态创建及初始化:在创建数组时,直接指定数组中元素的个数。

int[] array = new int[10] ;

细心的读者可以发现,这种初始化和上文数组定义时举出的案例十分相似,是的,在之前的数组定义时举出的案例就是三个动态创建及初始化。(这里在展示一次)

int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组

double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组

String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组

看完动态创建及初始化后,在来看一下静态创建及初始化:

        静态创建及初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定。

T[] 数组名称 = {data1, data2, data3, ..., datan} ;

这里举出几个静态创建及初始化的案例助你进一步理解。(如下)

int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};

double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};

String[] array3 = new String[]{"hell", "Java", "!!!"};

当然,对于静态创建及初始化java中提供了一种缩写形式,即可以将等号后面的new T[ ]省略掉,所以上边案例就可以改写为:

int[] array1 = {0,1,2,3,4,5,6,7,8,9};

double[] array2 = {1.0, 2.0, 3.0, 4.0, 5.0};

String[] array3 = {"hell", "Java", "!!!"};

注意:

1.  静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
2.  静态初始化时, {}中数据类型必须与[]前数据类型一致。
3.  静态初始化可以简写,省去后面的new T[]。

这样我们就大致的了解了数组的动态创建及初始化 和 静态创建及初始化

补充:

        (1)数组的创建及初始化的分离

        对于数组的创建及初始化,我们可以先进行创建,在初始化,将创建和初始化分开,例如:

动态初始化:

//创建和初始化分开
int[] array;
array = new int[10];
        
//创建和初始化合在一起
int[] array = new int[10];

静态初始化:

//创建和初始化分开
int[] array;
array = new int[]{1, 2, 3, 4, 5};
                
//创建和初始化合在一起
int[] array = new int[]{1, 2, 3, 4, 5};

但是要注意:当我们将创建和初始化分开写的时候,就不可以写静态初始化的简写形式了!

        (2)数组不进行初始化时会有默认值

如果没有对数组进行初始化,数组中元素有其默认值,不同类型的数组默认值如下:

类型默认值
byte0
short0
int0
long0
float0.0f
double0.0
char/u0000
booleanfalse

这样我们就大致的了解了数组的定义与创建了。

2.数组的遍历

        我们知道数组在内存中是连续的,那么我们如何去遍历数组中的数据呢?大致有三种方式。

        (1)使用for循环

大致代码如下:

//使用for循环
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }

      

        (2)使用增强for循环

大致代码如下:

//使用增强for循环
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        for(int number : array){
            System.out.print(number+" ");
        }

 在增强for循环的内部int number 为从数组中每次取出的数据,而array及所要遍历的数组。

        (3)使用Array.toString方法

大致代码如下:

//导入包
import java.util.Arrays;

//使用Array.toString方法
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        System.out.println(Arrays.toString(array));

这样我们就了解了java中数组如何进行遍历了。

3.数组中常用的API

        说在前面:对于Java中数组的常用API,其方法都在java.util.Arrays包下,所以使用时要进行导包:

import java.util.Arrays;

在 IntelliJ IDEA 编译器中,其会帮助我们自动进行导包。

那么让我们先来看一下有哪些常用的数组API:

我们一个一个进行讲解:

        (1)binarySearch

binarySearch方法的作用:binarySearch方法是用来在数组中查找指定数据的,其返回值为想要查找的数据对应的索引值。

例如:

import java.util.Arrays;

public class java2024_5_9 {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        //在数组中查找数字5数据的索引值
        int index = Arrays.binarySearch(array, 5);
        System.out.println(index);
    }
}

当然,以上情况是可以在数组中找到找到对应的数据的索引的(数字5在数组中),那么如果数据不在数组中呢?(如下)

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7};
        
        //在数组中查找数字10对应的索引
        int index = Arrays.binarySearch(array, 10);
        System.out.println(index);
    }
}

我们可以发现其返回值为负数,这就代表了数字10不在对应的数组中!

这样我们就大致了解了binarySearch方法的使用了。

        (2)copyOf

copyOf方法的作用:用于拷贝数组中的内容的。(可以拷贝全部,也可以拷贝一部分)

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //拷贝数组array
        int[] ret = Arrays.copyOf(array, array.length);
        //遍历数组
        for (int i = 0; i < ret.length; i++) {
            System.out.print(ret[i] + " ");
        }
    }
}

当然,我们也可以只拷贝从开头的一部分:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //拷贝数组array,但是只拷贝5个数字
        int[] ret = Arrays.copyOf(array, 5);
        //遍历数组
        for (int i = 0; i < ret.length; i++) {
            System.out.print(ret[i] + " ");
        }
    }
}

这样我们就大致了解了copyOf方法的使用了。

        (3)copyOfRange

copyOfRange方法的作用:用于拷贝数组中的内容的。(可以拷贝全部,也可以拷贝一部分)。

我们会发现copyOfRange方法和copyOf方法都是拷贝数组的,那么它们有什么区别呢?

        区别——copyOfRange可以拷贝任何一段数组,而copyOf只能从头开始拷贝。

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //拷贝数组array中索引从3到5的数据
        int[] ret = Arrays.copyOfRange(array, 3,6);
        //遍历数组
        for (int i = 0; i < ret.length; i++) {
            System.out.print(ret[i] + " ");
        }
    }
}

注意:拷贝索引值包括前面的,但是不包括后面的!

这样我们就大致了解了copyOfRange方法的使用了。

        (4)equals

equals方法的作用:用于比较两个数组中的数据内容是否相等。

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        int[] array2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        int[] array3 = {1, 2, 3, 4, 5, 6, 7, 8};
        //比较array1和array2
        System.out.println(Arrays.equals(array1,array2));
        //比较array1和array3
        System.out.println(Arrays.equals(array1,array3));
    }
}

这样我们就大致了解了equals方法的使用了。

        (5)fill

fill方法的作用:用于将数组中的所有数据都填充为特定值。

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //将数组中的所有数字填充为100
        Arrays.fill(array, 100);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

这样我们就大致了解了fill方法的使用了。

        

        (6)sort

sort方法的作用:用于排序数组。

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 4, 3, 5, 8, 7, 6, 2, 9, 10};

        //对数组进行排序
        Arrays.sort(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

当然我们会发现其默认的排序方式为升序,那么如何将其排为降序呢?之后学习了比较器之后才可以进行降序,这里不进行讲解。

这样我们就大致了解了sort方法的使用了。

        (7)toString

toString方法的作用:用于将数组打印成字符串的形式。

例如:

import java.util.Arrays;

public class java {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        System.out.println(Arrays.toString(array));
    }
}

这样我们就大致了解了toString方法的使用了。

4.二维数组

        (1)二维数组的定义

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组,定义二维数组的方式为:

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 } ;

用一个例子帮助你进一步理解:

//定义一个二维数组
int[][] arr = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};

对于二维数组中的每一个一维数组,数组中的内容要使用{ }括起来,当然二维数组的用法和一维数组并没有明显差别, 因此我们不再赘述。

        (2)二维数组的遍历

对于二维数组的遍历,其也分为使用for循环、使用增强for循环和使用Array.deepToString方法。

接下来我们直接使用案例来分别看一下三中遍历方式:

        【1】使用for循环

例子:

public class java {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

        //遍历二维数组
        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】使用增强for循环

例子:

public class java {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

        //遍历二维数组
        for (int[] ret : array) {
            for (int number : ret) {
                System.out.print(number + " ");
            }
            System.out.println();
        }
    }
}

        【3】使用Array.deepToString方法

例子:

public class java {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

        //遍历二维数组
        System.out.println(Arrays.deepToString(array));
    }
}

这样我们就大致了解了二维数组的使用规则。


以上就是本篇文章的所有内容了~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MOSFET数据手册你会看了吗?

目录 一、功率损耗Power dissipation ​编辑二、结温Junction temperature 三、热阻Thermal resistance 四、寄生电容Cisis/Coss/Crss 五、开关时间 Time 一、功率损耗Power dissipation 功率损耗主要分为两类&#xff1a;静态损耗和动态损耗。静态损耗主要由器件的导通电…

wordpress忘记后台密码,在数据库中修改回来,然后再修改回去。

源地址&#xff1a;https://www.ctvol.com/seoomethods/1421332.html 我们在做wordpess运维的时候&#xff0c;都会遇到很尴尬的时候&#xff0c;有时候在错误运维中&#xff0c;不知道删除了什么东西&#xff0c;造成wordpress后台不能登录&#xff0c;后台页面也直接失效&am…

【Web后端】web后端开发简介_Servlet简介

1.web后端开发简介 Java企业级开发&#xff0c;也就是学习]avaEE(Enterprise Edition)版本,是一种结构和一套标准。在应用中开发的标准就是Servlet、jsp和JavaBean技术。jsp技术现在已基本处于淘汰状态&#xff0c;简单了解即可web后端开发&#xff0c;基于B/S模式的开发体系。…

日本站群服务器提升网站用户体验的选择

日本站群服务器提升网站用户体验的选择 在当今数字化时代&#xff0c;网站的性能和用户体验对于在线业务的成功至关重要。为了确保网站能够提供快速、可靠和高效的访问体验&#xff0c;越来越多的网站管理员和企业选择了使用站群服务器。本文将深入探讨日本站群服务器的独特优…

CogVLM 本地部署体验(问题解决)

硬件要求&#xff08;模型推理&#xff09;&#xff1a; INT4 &#xff1a; RTX30901&#xff0c;显存24GB&#xff0c;内存32GB&#xff0c;系统盘200GB INT4 &#xff1a; RTX40901或RTX3090*2&#xff0c;显存24GB&#xff0c;内存32GB&#xff0c;系统盘200GB 模型微调硬件…

在k8s中部署Prometheus并实现对k8s集群的监控

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s简介 2、 Prometheus概述 二、准备k8s环境 1、…

游戏新手村24:游戏数据分析的思路及方法

在手机游戏和友盟统计、百度统计诞生之前&#xff0c;很多的游戏公司都是团队自己开发相关的数据统计平台&#xff0c;设定不同的角色和权限&#xff0c;满足业务部门同事的需要&#xff0c;为运营决策提供支持和依据。 近两年手机游戏和移动APP兴起&#xff0c;友盟统计和百度…

Java自动化测试框架--TestNG详解

一. 什么是TestNG TestNG是一个开源的自动化测试框架&#xff0c;它受JUnit和NUnit启发&#xff0c;其中“NG”即表示Next Generation&#xff0c;其功能更强大使用更方便。 二. TestNG配置 2.1 POM文件配置 在maven工程的pom.xml文件中加入以下依赖&#xff1a; <depe…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

【题解】非对称之美(规律)

https://ac.nowcoder.com/acm/problem/214851 #include <iostream> #include <string> using namespace std; string s; int n; int fun() {// 1. 判断是否全都是相同字符bool flag false;for (int i 1; i < n; i) {if (s[i] ! s[0]){flag true;break;}}if…

【小白的大模型之路】基础篇:Transformer细节

基础篇&#xff1a;Transformer 引言模型基础架构原论文架构图EmbeddingPostional EncodingMulti-Head AttentionLayerNormEncoderDecoder其他 引言 此文作者本身对transformer有一些基础的了解,此处主要用于记录一些关于transformer模型的细节部分用于进一步理解其具体的实现机…

ros 学习记录(二)URDF小车运动控制

URDF小车运动控制 准备工作创建 robot_xacro.launch 接上文&#xff0c;想用键盘控制小车在Gazebo中移动。 准备工作 名称版本ROSNoeticGazebo11.11.0 创建 robot_xacro.launch 通过运行这个launch文件&#xff0c;可以启动Gazebo仿真环境&#xff0c;并在仿真环境中加载和…

使用 Express 框架构建的 Node.js web 应用程序

使用 Express 框架构建的 Node.js web 应用程序 ├── config │ └── config.js ├── middlewares │ └── errorHandler.js ├── routes │ ├── index.js │ ├── postRoutes.js │ └── userRoutes.js ├── .env ├── .gitignore ├── app.js ├…

语言基础 /CC++ 可变参函数设计与实践,必须要指定可变参数的个数?YES

文章目录 概述语法符号 ...变参函数的强制参数没必要指定变参首元素自以为是&#xff0c;找到了不定义变参个数的方法函数 printf 和 vprintf 隐式的指明了变参个数宏函数 va_arg 透析小节 概述 本文重点分析论证了&#xff0c;在可变参函数参数表中指定变参个数的必要性&…

7个VS Code大模型AI插件,编程如虎添翼

大家好&#xff0c;在编程领域&#xff0c;效率和速度是项目成功的核心要素。对于开发者来说&#xff0c;拥有合适的工具可以在复杂的编程任务中游刃有余。 VS Code 插件正是这样一种强大的辅助&#xff0c;能够帮助提升工作效率&#xff0c;让开发者在面对编程挑战时更加从容…

java入门1.1.1版本

前言&#xff1a; 上面的内容是1.0.0~1.1的内容总结 秉持着先做再定义的理念&#xff0c;这里会带着大家先体验一下类与对象 第一步&#xff1a;新建一个java文件 鼠标右键 → 新建 → 文本文档 → 右键 → 点击重名 → 全选 → hello.java 第二步&#xff1a;用笔记本打开 …

自动控制原理学习--平衡小车的控制算法(三)

上一节PID的simulin仿真&#xff0c;这一节用LQR 一、模型 二、LQR LQR属于现代控制理论的一个很重要的点&#xff0c;这里推荐B站的【Advanced控制理论】课程&#xff08;up主DR_CAN&#xff09;&#xff0c;讲得很好&#xff0c;这里引用了他视频里讲LQR的ppt。 LQR属于lo…

rngd: Error writing /dev/tpm0

检查数据库时发现messages中一直有rngd报错&#xff0c;rngd一直未配置&#xff0c;直接关闭了 /var/log/messages-20240414:Apr 11 04:59:49 hydb2 rngd: Error writing /dev/tpm0 /var/log/messages-20240414:Apr 12 07:31:39 hydb2 rngd: Error writing /dev/tpm0 /var/log…

[微信小程序] 入门笔记2-自定义一个显示组件

[微信小程序] 入门笔记2-自定义一个显示组件 0. 准备工程 新建一个工程,删除清空app的内容和其余文件夹.然后自己新建pages和components创建1个空组件和1个空页面. 设定 view 组件的默认样式,使其自动居中靠上,符合习惯.在app.wxss内定义,作用做个工程. /**app.wxss**/ /* 所…

Screeps工程化之配置化

目录 前言一、抽取配置项二、读取配置项 前言 Screeps中所有代码都会在一个tick&#xff08;游戏内的世间&#xff09;内执行完成&#xff0c;想要做到代码的高度复用&#xff0c;和隔离各个房间creep的行为就需要将部分代码进行配置化&#xff0c;本文仅为作者本人的游戏思路…