JavaSE入门---认识Java数组

news2024/10/12 20:25:24

文章目录

  • 一. 数组的基本概念
    • 1.1 为什么要使用数组?
    • 1.2 什么是数组?
    • 1.3 数组的使用
  • 二. 数组是引用类型
  • 三. 数组的应用场景
  • 四. 数组中的常用方法
  • 五. 二维数组

一. 数组的基本概念

1.1 为什么要使用数组?

想象这样的一个场景:期末考试完后,老师要将所有学生的成绩保存起来,用我们学过的知识该怎么办呢? 可能是创建多个变量,每个变量用来存储一个学生的成绩,即:

	public static void main(String[] args) {
        int score1 = 70;
        int score2 = 70;
        int score3 = 70;
        int score4 = 70;
        int score5 = 70;
        int score6 = 70;
        int score7 = 70;
    }

这样写就会遇到一个问题:数据量非常大的时候,创建的变量太多,代码太繁琐,不适用。
所以,我们就需要引入一个新的东西来存储信息—这就是数组。他使用起来非常简便,即:

        int[] array = {70,70,70,70,70,70,70};

1.2 什么是数组?

数组:可以看成是相同类型元素的一个集合(就像上面的学生成绩一样,都是int型)
数组在内存中则是一段连续的空间。每一小块空间都有自己的编号,存放一个数据。
在这里插入图片描述

1.3 数组的使用

1.3.1 数组的创建

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

1.3.2 数组的初始化

  1. 动态初始化:在创建数组时直接指定数组中元素的个数,但是可以灵活添加需要的元素。

     int[] array = new int[10];
    
  2. 静态初始化:在创建数组时不直接指定数组元素的个数,而直接将具体的数据内容进行指定。

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

注:

  1. 静态初始化虽然没有指定数组的长度,但编译器在编译过程中会根据{}里元素的个数来确定数组的长度。
  2. 静态初始化时{}里的元素类型必须与[]里的数据类型一致。
  3. 如果数组已经开辟了内存空间,但是没有添加元素,则数组元素有其默认值。
    如果是基本数据类型,则默认值为:
    在这里插入图片描述
    如果是引用类型,则默认值为:null

1.3.3 数组的使用

  • 数组中元素的访问
    数组在内存中是一段连续的空间,空间的编号都是从0开始,依次递增,该编号称为数组的下 标。数组可以通过下标访问任意位置的元素。
   		int[] array = {1,2,3,4,5,6,7,8,9,10};
        int num1 = array[0];
        int num2 = array[1];
        int num3 = array[2];

注: 数组下标从0开始,介于[0,N)之间 不包括N(N为元素个数),不能越界,否则会出现数组下标越界的异常(上面是异常?后面会进行介绍)

  • 遍历数组
    遍历是指:把数组中的每个元素都访问一遍。

for循环遍历

		int[] array = {1,2,3,4,5,6,7,8,9,10};
        for (int i = 0; i < array.length; i++){
            System.out.println(array[i]);
        }

for-each遍历

		int[] array = {1,2,3,4,5,6,7,8,9,10};
        for (int a : array) {
            System.out.println(a);
        }

二. 数组是引用类型

基本数据类型创建的变量,称为基本变量,其空间中存放的是其对应的值。
引用数据类型创建的变量,称为对象的引用,其空间中存放的是其所指对象所在空间的地址。

注:

  1. 引用变量并不直接存储对象本身,可以简单理解成:对象在空间中的起始地址,通过该地址引用变量就可以去操作对象。
  2. null在Java中表示“空引用",也就是一个不指向对象的引用,表示一个无效的内存地址。

三. 数组的应用场景

1.1 保存数据

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

1.2 作为函数的参数

 	public static void func(int[] arr){
        System.out.println(arr.length);
    }

    public static void main(String[] args) {
        int[] arr = {1,2,3};
        func(arr);
    }

1.3 作为函数的返回值

	public static int[] setValue(int[] arr){
        for (int i = 0; i < arr.length; i++){
            arr[i] = i;
        }
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = new int[5];
        int[] ret = setValue(arr);
    }

四. 数组中的常用方法

4.1 数组转字符串 Arrays.toString()

		int[] arr = {1,2,3};
        System.out.println(Arrays.toString(arr));

4.2 数组拷贝

4.2.1 Arrays.copyOf()

在这里插入图片描述

		int[] arr = {1,2,3};
        int[] newArr = Arrays.copyOf(arr,arr.length);

4.2.2 Arrays.copyOfRange()

在这里插入图片描述

		int[] arr = {1,2,3};
        int[] newArr = Arrays.copyOfRange(arr,0,2);

4.2.3 System.arraycopy()

在这里插入图片描述

		int[] arr = {1,2,3};
        int[] newArr = new int[3];
        System.arraycopy(arr,0,newArr,0,3);

4.2.4 arr.clone()

		int[] arr = {1,2,3};
        int[] newArr = arr.clone();

深拷贝、浅拷贝?

深拷贝:如果我们能够做到修改拷贝之后的数组而不影响原数组,这样的拷贝叫做深拷贝。
在这里插入图片描述

浅拷贝:如果我们不能够做到修改拷贝之后的数组而不影响原数组,或者说如果我们修改拷贝后的数组会影响到原数组,这样的拷贝叫做浅拷贝。
在这里插入图片描述

4.3 数组排序 Arrays.sort()

给定一个数组, 让数组升序 (降序) 排序.

		int[] arr = {1,2,3};
        Arrays.sort(arr);

4.4 数组逆序

思路:设置俩个下标,前一个下标指向数组第一个元素,后一个下标指向数组最后一个元素,然后交换这俩个元素, 再让 前一个下标+1 后一个下标-1 重新进入循环。

	public static void reverse(int[] arr){
        int left = 0;
        int right = arr.length-1;
        while (left < right){
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;

            left++;
            right--;
        }
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }

4.5 求数组中元素的平均值

思路:将数组内元素全部求和 再除以元素个数

	public static int avg(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++){
            sum += arr[i];
        }

        return sum / arr.length;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        int ret = avg(arr);
        System.out.println(ret);
    }

4.6 查找数组中指定元素

  • 顺序查找:遍历数组
	public static void find(int[] arr,int key){
        for (int i = 0; i < arr.length; i++){
            if (arr[i] != key){
                continue;
            }else {
                break;
            }
        }
        System.out.println("找到了");
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        find(arr,5);
    }
  • 二分查找:
    思路:前提 数组必须有序
    将数组最中间元素与要查询的元素比较大小:
    如果相等,则找到了 返回即可。
    如果小于,则在数组的右半边以相同方式继续查找。
    如果大于,则在数组的左半边以相同方式继续查找。
	public static void binarySearch(int[] arr, int key){
        int left = 0;
        int right = arr.length-1;

        while (left < right){
            int mid = (left + right) / 2;
            if (arr[mid] < key){
                left = mid + 1;
            }else if (arr[mid] > key){
                right = mid - 1;
            }else {
                System.out.println("找到了");
                break;
            }
        }
        if (left >= right){
            System.out.println("没找到");
        }
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        binarySearch(arr,5);
    }

五. 二维数组

基本语法:数据类型[][] 数组名称 = new 数据类型[行数][列数];

5.1 二维数组的初始化

二维数组的初始化方式和一维数组类似,共有两类。

注:必须有行数,可以没有列数;

5.1.1 动态初始化

        int[][] arr = new int[2][3];

5.1.2 静态初始化

		int[][] arr = {{1,2,3},{4,5,6}};
        int[][] arr1 = new int[][]{{1,2,3},{4,5,6}};

5.2 二维数组的访问
二维数组实际上是两个一维数组的组合,每个一维数组都是这个二维数组的每一行。

5.2.1 for循环

		int[][] arr = {{1,2,3},{4,5,6}};
        for (int i = 0; i < arr.length; i++){            // arr.length     得到二维数组有几行
            for (int j = 0; j < arr[0].length; j++){     // arr[].length   得到二维数组有几列
                System.out.println(arr[i][j]);
            }
        }

5.2.2 for-each

		int[][] arr = {{1,2,3},{4,5,6}};
        for(int[] array : arr){            //得到二维数组的每一行
            for (int x : array){           //得到二维数组的每一列
                System.out.println(x);
            }
        }

5.2.3 库函数 Arrays.deepToString()

		int[][] arr = {{1,2,3},{4,5,6}};
        System.out.println(Arrays.deepToString(arr));

5.3 不规则数组

		//行数确定时 可以根据行数来设置不同的列数
        int[][] arr = new int[2][];
        arr[0] = new int[3];
        arr[1] = new int[5];
        System.out.println(Arrays.deepToString(arr));
        //打印结果:[{0,0,0},{0,0,0,0,0}]    因为没有赋值  所以都设置默认值0

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

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

相关文章

混淆技术研究笔记(七)Ant扩展介绍

ant 扩展官方文档&#xff1a;https://ant.apache.org/manual/develop.html Writing Your Own Task 编写你自己的任务 1. 创建一个XXTask类 创建一个Java类继承org.apache.tools.ant.Task &#xff0c;实际上不继承也可以&#xff0c;定义一个 execute() 方法就可以&#xf…

【python】制作一个windows端自动化工具!

作为一名自动化工程师&#xff0c;这一章&#xff0c;带大家来看看我是如何制作一个windows端的自动化工具&#xff0c;本章节内容我会从基础的环境配置、基础模块介绍、框架设计、实际运用等方面来讲解&#xff0c;对于想要未来从事该行业的人来说&#xff0c;希望这篇文章能给…

公司重要文件防泄密

公司重要文件防泄密是企业管理中一项非常重要的任务&#xff0c;今天分享几个可以防止公司重要文件泄密的方式&#xff1a; 1、建立完善的文件管理制度 企业应该制定严格的文件管理制度&#xff0c;包括文件分类、加密、访问权限的管理等。确保每个员工都了解文件管理制度并严…

【力扣1528】重新排列字符串

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、Java代码2、C代码 一、题目描述 给你一个字符串 s 和一个长度相同的整数数组 indices。 请你…

GLIP DetCLIP

1 GLIP: 十分钟解读GLIP&#xff1a;Grounded Language-Image Pre-training - 知乎 Grounded Language-Image Pre-training&#xff08;GLIP&#xff09;论文笔记 - 知乎 GLIP的主要贡献如下&#xff1a; 将phrase grounding和目标检测任务统一&#xff0c;将image和text pr…

Docker 快速入门体验

Docker 是什么&#xff1f; Docker 是一个开源项目&#xff0c;它能够自动化部署应用程序&#xff0c;通过所谓的容器来实现。这些容器允许开发者将自己的应用以及依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 或 Windows 机器上也可以实现虚拟化。Do…

Linux系统中配置系统

在Linux系统中配置系统设置->网络设置代理的详细教程如下&#xff1a; 首先&#xff0c;确保您已经安装了NetworkManager和nmtui。在终端中输入以下命令&#xff1a; sudo apt-get update sudo apt-get install network-manager nmtui 打开系统设置。在桌面上点击“设置”…

文件和命令的查找与处理

1.命令查找 which which 接命令 2.文件查找 find 按文件名字查找 准确查找 find / -name "hosts" 粗略查找 find / -name "ho*ts" 扩展名查找 find / -name "*.txt" 按文件类型查找 find / -type f 文件查找 find / -ty…

哈夫曼树实现哈夫曼编码(C++)

题目要求&#xff1a;根据哈夫曼编码的原理&#xff0c;编写一个程序&#xff0c;在用户输入结点权值的基础上求赫夫曼编码&#xff0c;并能把给定的编码进行译码。 &#xff08;1&#xff09;初始化&#xff1a;从键盘输入一字符串&#xff08;或读入一文件&#xff09;&…

【微服务】spring webflux使用详解

目录 一、webflux介绍 1.1 什么是webflux 1.2 什么是响应式编程 1.3 webflux特点 二、Java9中响应式编程 2.1 定义事件流源 2.2 实现订阅者 三、Spring Webflux介绍 四、Reactor 介绍 五、Reactor 常用API操作 5.1 Flux 创建流操作API 5.2 Flux响应流的订阅 5.3 Fl…

PHP WAP餐厅点餐系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP餐厅点餐系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP WAP餐厅点餐系统 代码 https://download.csdn.net/download/qq_41221322/88440001 二、…

Kubeadm部署k8s集群 kuboard

目录 主机准备 主机配置 修改主机名&#xff08;三个节点分别执行&#xff09; 配置hosts&#xff08;所有节点&#xff09; 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包&#xff08;所有节点&#xff09; 系统参数设置(所有节点) 时间同步(所有节点) 配…

【密码学】第三章、分组密码

DES、IDEA、AES、SM4 1、分组密码定义&#xff08;按照五个组成部分答&#xff09; 密钥空间&#xff1a;属于对称加密算法kekd明密文空间&#xff1a;将明文划分为m比特的组&#xff0c;每一块依次进行加密加解密算法&#xff1a;由key决定一个明文到密文的可逆映射 2、发展…

C语言入门-1.1 C语言概述

想要学好一门计算机编程语言&#xff0c;就和谈一个女朋友是一样的&#xff0c;需要对其深入了解。 1、计算机语言 &#xff08;1&#xff09;什么是计算机语言&#xff1f; 顾名思义&#xff0c;就是计算机之间交流的语言&#xff0c;就和人一样&#xff0c;咱们都是使用普通…

中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例

中文编程开发语言工具编程实际案例&#xff1a;美发店会员管理系统软件编程实例 中文编程开发语言工具编程实际案例&#xff1a;美发店会员管理系统软件编程实例。 软件功能&#xff1a; 1、系统设置&#xff1a;参数设定&#xff0c;账号及权限设置&#xff0c;系统初始化&a…

PHP的四层架构

PHP的4层架构是一种软件设计模式&#xff0c;用于将一个PHP应用程序划分为不同的层次&#xff0c;以实现解耦、可扩展和易于维护的代码结构。这个架构通常由以下四个层次组成&#xff1a; 1、 表现层&#xff08;Presentation Layer&#xff09;&#xff1a; 表现层是与用户直…

动态规划解股票类型

文章目录 单只股票买卖多次买卖单只股票最多两次买卖股票最多买k次含冷静期含手续费 单只股票买卖 买卖股票的最佳时机 关键思路&#xff1a;找到一个值&#xff0c;他与之后的最大值之差最大。 用minprice记录最小的值&#xff0c;用maxprofit记录最大的收益。 想清楚一个点…

麒麟kylinOS 2303制作自定义免交互安装镜像

原文链接&#xff1a;麒麟kylinOS 2303制作自定义免交互安装镜像 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇麒麟kylinOS 2303制作自定义免交互ISO安装镜像的文章&#xff0c;内容相对来说比较简单&#xff0c;测试安装了一个360浏览器软件&#xff0c;后续复杂…

c语言练习93:环形链表的约瑟夫问题

环形链表的约瑟夫问题 环形链表的约瑟夫问题_牛客题霸_牛客网 描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号是…

【CesiumforUnreal插件】UE5 快速构建Cesium场景 快速入门!!!

目录 0 引言1 快速入门1.1 准备1.2 安装Cesium for Unreal插件并创建一个项目1.3 准备关卡并添加地形和纹理1.4 添加3D建筑到场景中1.5 探索场景 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CesiumforUnreal专栏&#x1f4a5; 标题&#xff1a…