JavaSE入门---认识Java数组

文章目录

  • 一. 数组的基本概念
    • 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.hqwc.cn/news/139752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【解决】运行vue项目,启动报错 in ./node_modules/@intlify/core-base/dist/core-base.cjs

我的处理方式: 一开始查了好多方法&#xff0c;删除node_modules&#xff0c;重新安装&#xff0c;切换node版本等&#xff0c;但是发现并没有用 之后来发现是安装依赖包的时候有些包安装失败导致的&#xff0c;只要有针对性的重新安装依赖就可以了 例如&#xff1a; in ./n…

会议OA小程序【首页布局】

目录 一. Flex布局介绍 1.1 什么是Flex布局 1.2 基本概念 1.3 Flex属性 二. 会议OA首页轮播图的实现 配置 Mock工具 swiper 效果展示 三. 会议OA首页会议信息布局 index.js index.wxml index.wxss 首页整体效果展示 一. Flex布局介绍 布局的传统解决方案&#x…

服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间内&#xff0c;相信很多使用金蝶或用友的办公软件的企业&#xff0c;有很多都经历了locked勒索病毒的攻击&#xff0c;导致企业服务器被加密无法正常使用&#xff0c;严重影响了企业的正常工作。通过云天数据恢复中心的解密恢复发现&#xff0c;在今年locked勒索病…

亲,手撸图文博文太累了?试试这个神器!

这一篇博客有关如何使用[InternLM-XComposer]来写图文并茂的博文。InternLM-XComposer是一个基于人工智能的创作工具&#xff0c;它可以根据你的输入生成不同类型的内容&#xff0c;例如文章、诗歌、歌词、代码等。你可以使用它来创作有趣和有创意的博客&#xff0c;同时也可以…

如何评估大语言模型是否可信?这里总结了七大维度

源自&#xff1a;机器之心发布 作者&#xff1a;刘扬&#xff0c;Kevin Yao 实际部署中&#xff0c;如何 “对齐”&#xff08;alignment&#xff09;大型语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;&#xff0c;即让模型行为与人类意图相一致…

贴片电阻材质:了解电子元件的核心构成 | 百能云芯

在现代电子设备中&#xff0c;贴片电阻是一类至关重要的 passives 元件&#xff0c;广泛用于各种电路和应用中。贴片电阻的性能取决于多个因素&#xff0c;其中材质是其中之一。云芯将带您深入探讨贴片电阻的不同材质&#xff0c;探讨不同材质对电子元件性能的影响&#xff0c;…

Databend 开源周报第 115 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 聚合索引 Data…

如何打造智能公厕:实现智慧监测、自动化运营和智慧化管理

在现代城市里&#xff0c;公共厕所是人们不可或缺的基础设施之一。然而&#xff0c;传统的公厕管理方式已经无法满足人们对公厕的期望&#xff0c;因此需要采用智慧公厕管理系统来提升公厕服务的质量。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例现…

WAF,Yakit,SSH 小技巧

文章目录 WAF,Yakit,SSH 小技巧1. WAF 文件上传绕过2. Yakit 暴力破解3. SSH 免密码登录4. SSRF配合redis未授权漏洞4.1 安装ssh4.2 redis未授权4.3 安装redis4.4 Gopher协议4.5 利用redis写文件 WAF,Yakit,SSH 小技巧 1. WAF 文件上传绕过 脏数据绕过WAF适用于所有的漏洞&am…

【微服务 SpringCloud】实用篇 · Eureka注册中心

微服务&#xff08;3&#xff09; 文章目录 微服务&#xff08;3&#xff09;1. Eureka的结构和作用2. 搭建eureka-server2.1 创建eureka-server服务2.2 引入eureka依赖2.3 编写启动类2.4 编写配置文件2.5 启动服务 3. 服务注册1&#xff09;引入依赖2&#xff09;配置文件3&am…

文心大模型4.0亮相2023百度世界大会,助力各赛道应用进一步发展

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Python 机器学习入门之逻辑回归

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 逻辑回归 系列文章目录前言一、逻辑回归简介二、逻辑回归推导1、问题2、Sigmoid函数3、目标函数3.1 让…