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

        前言:数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同,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.mfbz.cn/a/610151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka从0到消费者开发

安装ZK Index of /zookeeper/zookeeper-3.9.2 下载安装包 一定要下载-bin的&#xff0c;不带bin的是源码&#xff0c;没有编译的&#xff0c;无法执行。-bin的才可以执行。 解压 tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz 备份配置 cp zoo_sample.cfg zoo_sample.cfg-b…

Chronos:学习时间序列的大语言模型(论文解读)

前言 《Chronos: Learning the Language of Time Series》原文地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文&#xff0c;并对其进行了中文翻译。还有部分最佳示例教程。如果有帮助到大家&#xff0c;请帮忙点亮…

RAG技术简介

相关文档&#xff1a; 论文链接&#xff1a; https://arxiv.org/abs/2005.11401 课程链接&#xff1a; Tutorial/huixiangdou at camp2 InternLM/Tutorial GitHub 视频链接&#xff1a; 茴香豆&#xff1a;搭建你的 RAG 智能助理_哔哩哔哩_bilibili RAG是一种在LLM中广泛使…

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

Spring MVC分页示例

Spring MVC分页示例 分页用于在不同部分显示大量记录。在这种情况下&#xff0c;我们将在一页中显示10、20或50条记录。对于其余记录&#xff0c;我们提供链接。 我们可以在Spring MVC中简单地创建分页示例。在此分页示例中&#xff0c;我们使用MySQL数据库来获取记录。 创建…

MySQL索引优化(超详细)篇章2--索引调优

目录 1.索引失效状况2.性能分析3.表的索引信息--调整索引顺序4.删除冗余索引5.最佳左前缀法则5.1下面是一个实际的例子来说明这个概念&#xff1a; 6.数据长度和索引长度占用空间比较 1.索引失效状况 MySQL索引失效通常指的是查询语句无法有效地利用索引&#xff0c;而导致全表…

为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

一、安全特性 在上篇文章中&#xff0c;我们了解到HTTP在通信过程中&#xff0c;存在以下问题&#xff1a; 通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能被窃听不验证通信方的身份&#xff0c;因此有可能遭遇伪装而HTTPS的出现正是解决这些问题&#xff0c…

基于springboot + vue 实现的简易博客系统

项目效果图 登陆页面 文章列表 发表文章 用户管理 栏目管理 数据统计 后端技术栈后端主要采用了&#xff1a; 1.SpringBoot 2.SpringSecurity 3.MyBatis 4.部分接口遵循Restful风格 5.MySQL 前端技术栈前端主要采用了&#xff1a; 1.Vue 2.axios 3.Elemen…

ETL如何执行Java脚本

ETLCloud提供了执行 Java 脚本的方式&#xff0c;让用户能够灵活地处理数据并实现各种复杂的数据处理任务。 ETLCloud在数据处理领域的应用优势主要体现在以下几个方面&#xff1a; 灵活性&#xff1a;通过执行Java脚本&#xff0c;用户能够灵活定制数据处理逻辑&#xff0c;满…

C语言---使用共用体将double型经纬度存储到无符号数组中

1.在上报经纬度时由于数据协议限制需要将double型数据存储到无符号数组中&#xff0c;下边是写了一个简单C程序进行验证&#xff1b; 2.代码示例如下 #include <stdio.h> typedef union {float data;unsigned char arr[4]; } my_data;int main() {my_data test_data {…

IDEA HTTP Client 插件配置空密码的 Request

最近在测试一些 rest api 的时候&#xff0c;发现 IDEA 的 HTTP Client 很好用。对比 postman 更加的轻量&#xff0c;可以满足一些简单的 HTTP 请求测试。这里主要记录下&#xff0c;当用户名没有设置密码时&#xff0c;我们该如何配置这个 HTTP Client 的 Request 文件&#…

综合内容运营实习生实习体验报告怎么写?

分享一个笔灵ai生成的综合内容运营的实习体验报告&#xff0c;有别的岗位需要的可以自己去网站使用 实习体验报告AI写作助手 | AI文章智能生成器 - 笔灵AI写作 实习体验报告 尊敬的领导&#xff1a; 您好&#xff01;我很荣幸有机会向您提交我的实习体验报告。在过去的几个月…

wpf中的图标字体和android的矢量图vector

1.背景 在安卓程序中如下截图所示中&#xff0c;在drawable文件夹下有如下图片文件。 这是一个xml文件&#xff0c;打开后看到Vector节点下paht中有一个pathData属性有一串带字母数字和"."点的数据。这些是什么呢&#xff1f; <vector xmlns:android"http:…

14个项目带你熟练学握AI2G免费分享|一门让你掌握人工智能能力的实操课(送工具)利用Midjourney

目录 1-一门让你掌握人工智能能力的实操课&#xff08;送工具&#xff09;.mp4 10-成为UI设计师&#xff1a;利用Midjourney进行页面UI设计.mp4 11-做室内设计师&#xff1a;利用Midjourney产出家居、室内设计方案.mp4 12-故事绘本&#xff1a;利用Midjouney准备课件、故事…

PCIe协议之-TLP路由基础

✨前言&#xff1a; 在PCI Express (PCIe) 技术中&#xff0c;数据包的路由方式对于确保信息能够高效、准确地传送至目标设备至关重要。PCIe定义了几种路由方式&#xff0c;主要有以下几种。 &#x1f31f;地址路由&#xff08;Address Based Routing&#xff09; 这是最基本…

自动驾驶系统中的数据闭环:挑战与前景

目录 自动驾驶概况 1.1自动驾驶分级 1.2自动驾驶国内发展 ​1.3自动驾驶架构模型 数据闭环的意义 2.1 搜集corner case的数据 2.2 提高模型的泛化能力 2.3 驱动算法迭代 数据闭环落地的痛点及对策 3.1 数据采集和使用的合规性问题 3.2 数据确权问题 3.3 数据采集…

【经验总结】 常用的模型优化器

优化器是一种用于优化模型权重和偏差的算法&#xff0c;它根据训练数据更新模型参数&#xff0c;以模型的预测结果更加准确。 1. 常见的优化器 SGD&#xff08;Stochastic Gradient Descent&#xff09;&#xff1a;SGD是一种基本的优化算法&#xff0c;它在每次迭代中随机选择…

揭秘Ping32如何实现上网行为监控

企业上网行为管理软件在现代企业管理中扮演着举足轻重的角色。它不仅能够监控和记录员工的上网行为&#xff0c;还能有效防止数据泄露和不当使用&#xff0c;从而保障企业的信息安全。 一、Ping32上网监控软件的具体功能包括&#xff1a; 1.网页浏览监控&#xff1a;对Chrome…

jvm面试题30问

什么是JVM的跨平台&#xff1f; 什么是JVM的语言无关性&#xff1f; 什么是JVM的解释执行 什么是JIT? JIT&#xff1a;在Java编程语言和环境中&#xff0c;即时编译器&#xff08;JIT compiler&#xff0c;just-in-time compiler&#xff09;是一个把Java的字节码&#xff08;…

流量卡就该这么选,用起来性价比真的超高!

很多朋友会私信小编&#xff0c;让小编给大家推荐几款流量卡&#xff0c;在这里小编告诉大家&#xff0c;流量卡可以推荐&#xff0c;但是每个人的喜好不同&#xff0c;小编也忙不过来&#xff0c;今天&#xff0c;小编整理了一篇选购指南&#xff0c;大家可以参考选择&#xf…
最新文章