Java入门-数组

数组

什么是数组

数组( array )是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。

数组的内存结构是分配一系列内存大小相等的连续空间。

img

数组定义

数组定义有三种方式。

给定数组中的每个元素赋值

int[] a = {1,2,3};

分配数组空间,每个元素默认值

int[] a = new int[3];

定义一个数组,有3个元素,每个元素初始值为int的初始值:0

定义数组,内存大小由数据的多少自动识别

int[ ] a = new int[ ]{1,2,3,5};

数组特性

数组使用索引(位置)访问元素,第一个索引为0

a**[0]** =1; //第一个元素存储的整数1

数组的长度由数组的属性(数组内置的特性)length获取

int len = a**.length;**

数组访问方式

a[index] = 3; //访问第index-1个元素

a[a.length-1] = 5; //访问最后一个元素

数组遍历

遍历: 访问所有的数组元素。

循环遍历所有元素

程序案例:

int[] a = { 1, 2, 3, 4, 5 };
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}

程序运行结果:

1	2	3	4	5

使用增强型for循环访问所有元素。

程序案例:

int[] a = { 1, 2, 3, 4, 5 };**
for (int t : a) {
	System.*out\*.print(t+"\t");
}

程序运行结果:

1	2	3	4	5

数组常见问题

越界异常

访问数组不得超越数组索引的界限(即最小索引-0,最大索引-length-1)。

img

类型异常

数组每个元素类型必须一致。

img

数组应用

冒泡排序

  • 排序思想

数组中相邻两个元素进行比较。

  • 排序流程

  • step1: 取第进行比较一个数a[i]和其相邻的元素a[i+1]比较。

  • step2: 如果a[i] <= a[i+1], i+1,找下一个元素。

  • step3: 如果a[i] > a[i+1]则将a[i]和a[i+1]的值进行交换,将大的值向数组尾部移动

  • step4: 一轮结束后,交换后的最大值已经移动到数组的末尾(即a.length-1)位置。

  • step5: 重复前四步,完成排序。

程序案例:

int[] a = {1,33,22,24,3,8,5};
for(int i=0;i<a.length-1;i++) {
for(int j=0;j<a.length-1-i;j++) {
    if(a[j] > a[j+1]) {
        int tmp = a[j];
        a[j] = a[j+1];
        a[j+1] =tmp;
	}
  }
}

选择排序

  • 排序思想

每一轮: 选出数组中的最大值/最小值

  • 排序流程

  • step1: 取第一个数为最小值min: min = a[0];

  • step2: 使用min和数组中的每一个元素比较

  • step3: 如果min>a[i] 则 min = a[i], 并记录当前值: pos = i;

  • step4: a[pos] = a[i], a[i] = min;

程序案例:

int[] a = {1,33,22,24,3,8,5};
int min =0;
int pos = 0;
for(int i=0;i<a.length-1;i++) {
    min = a[i];
    pos = i;
    for(int j=i+1;j<a.length;j++) {
    if(min > a[j]) {
        min = a[j];
        pos = j;
    }
}

a[pos] = a[i];
a[i] = min;
}

多维数组

概念

从元素存储的内容上讲,如果元素存储的是另一个数组的引用则称为多维数组。我们一般常用二维数组,可以把它看作一个平面记录x,y轴坐标。

img

补充:引用类型,是基本类型以外的类型。比如之前输入中我们用的Scanner对象,Scanner sc =new Scanner(System.in), sc 即为引用变量,类型为Scanner,在面向对象中我们会详细讲解引用。

二维数组定义

int**[][]** a = new [3][5];

定义的第一个数值3: 定义一个一维数组,有3个元素。

定义的第二个数值5: 每个元素引用一个数组长度为5的一维数组(此数值可以省略)

二维数组访问方式

a**[i][j]** = 5**;**

多维数组应用

img

程序案例:

int sum = 0;

int[][] a= {
				{22,66,44},
				{77,33,88},
				{25,45,65},
				{11,66,99}
		};	

for (int i = 0; i < a.length; i++) {
	for (int j = 0; j < a[i].length; j++) {
			sum += a\[i]\[j];
		}
}

System.out.println("销售总和:  " + sum);

程序运行结果:

销售总和:  641

Arrays类

概念

Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法。

常用api

img

常用API举例

toString():将数组转换为字符串

程序案例:

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

程序运行结果:

[1, 2, 3, 4, 5]
sort():数组排序

程序案例:

int[] a ={1,7,3,22,4,5};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

程序运行结果:

[1, 3, 4, 5, 7,22]
equals():判断数组是否相等

程序案例:

int[] a = {1,7,3,22,4,5};
int[] b = {1,7,3,22,4,5};
System.out.println(Arrays.equals(a,b)); 

程序运行结果:

true
copyof():拷贝数组

程序案例:

int[] a = {1,7,3,22,4,5};
int[] b = Arrays.copyOf(a,a.length);
System.out.println(Arrays.toString(b));

程序运行结果:

[1, 7, 3, 22, 4,5]

System.arraycopy()

数组的底层拷贝方式。

public static native void arraycopy(Object src, //源数组(准备拷贝的数组)**
 										int srcPos, //源数组的其实拷贝位置
                  					    Object dest,//目标数组
 									    int destPos,//目标数组的其实拷贝位置
                                        int length //拷贝长度

);

程序案例:

int[] src = {1,2,3,4,5};
int[] dest = new int[5];	
System.arraycopy(src, 0, dest, 0, 3);
System.out.println(Arrays.toString(dest));

程序运行结果:

[1, 2, 3, 0, 0]

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

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

相关文章

Vue 引入config.js后别的js访问不到window对象下的属性

Vue项目里,我们项目配置的请求服务器地址都是在public里config.js里,如下例: 然后在index.html里引入config.js,如下图: 这里要注意的是,script的src要写上<%= BASE_URL %>,代码如下: <!DOCTYPE html> <html><head><meta charset="…

SNRO 编号范围对象管控,唯一ID

事务代码:SNRO 代码引用: DATA: MAXTID TYPE I,NEWNO TYPE CHAR8. CALL FUNCTION NUMBER_RANGE_ENQUEUE EXPORTING OBJECT ZQC57 EXCEPTIONS FOREIGN_LOCK 1 OBJECT_NOT_FOUND 2 SYSTEM_FAILURE 3 OTHERS …

Python3.7编程之病毒

基础篇 什么是病毒 病毒&#xff0c;指的是一些通过非法手段获取系统的一些权限&#xff0c;然后进行破坏或者盗取。 病毒分为两类&#xff1a; 1、破坏型 这类病毒往往会将系统弄的乱七八糟&#xff0c;比如把你的U盘删光&#xff0c;把你的系统背景调成黑客图片&#xff0c…

NoETL 公开课预告|下周二,第三代指标平台即将展露真容

100% 统一指标口径、100% 自动化指标开发、100% 灵活指标分析、强大的指标定义能力和查询加速性能、“管、研、用”一体、做“轻”数仓…… 很多小伙伴都非常好奇 buff 叠满的第三代指标平台 Aloudata CAN 到底长什么样。接下来我们安排了 7 期开箱直播&#xff0c;结合企业业…

Flutter学习13 - Widget

1、Flutter中常用 Widget 2、StatelessWidget 和 StateFulWidget Flutter 中的 widget 有很多&#xff0c;但主要分两种&#xff1a; StatelessWidget无状态的 widget如果一个 widget 是最终的或不可变的&#xff0c;那么它就是无状态的StatefulWidget有状态的 widget如果一个…

腾讯云向量数据库-RAG介绍

1.说明 RAG结合LLM(通用大预言模型)构件基于私有文档、专业领域知识、实时信息的charbot。 2.RAG的主要步骤 知识切片成chunk向量化chunk入库query检索知识chunk构件prompts调用llm生成回答 3.优势 快速构件demo快速理解rag社区支持 4.痛点 投入大效果差调优难 5.RAG应…

MURF1640CT-ASEMI快恢复二极管MURF1640CT

编辑&#xff1a;ll MURF1640CT-ASEMI快恢复二极管MURF1640CT 型号&#xff1a;MURF1640CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;16A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;4…

【Java】JDK1.8 HashMap源码,put源码详细讲解

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 在Java中&#xff0c;HashMap结构是被经常使用的&#xff0c;在面试当中也是经常会被问到的。这篇文章我给大家分享一下我对于HashMap结构源码的理解。 HashMap的存储与一般的数组不同&#xff0c;HashMap的每一个元素存…

SQLite从出生到现在(发布历史记录)(二十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;从 SQLite 3.5.9 迁移到 3.6.0&#xff08;二十一&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 引言&#xff1a; SQLite拥有别人无法比拟的装机量&#xff0c;究竟什么成就了SQLite呢&#xff0c;本…

WPS制作表格热图

最近看到一篇文献使用了表格热图&#xff0c;于是想着用wps制作一个类似的。表格热图可以使表格中的数字大小变得更加直观。 参考文献原文&#xff1a;Miller, O.L., Helman, D., Tal Svoray, Morin, E., Bonfil, D.J., 2019. Explicit wheat production model adjusted for s…

2024/4/2—力扣—栈的最小值

代码实现&#xff1a; typedef struct node {int val;struct node *next; } Node;typedef struct {struct node *top;int min; } MinStack;/** initialize your data structure here. */MinStack* minStackCreate() {MinStack *obj malloc(sizeof(*obj));obj->top NULL;ob…

Failure Unable to retrieve image details-解决Portainer与Docker v26不兼容问题

文章目录 前言解决过程解决方法一解决方法二 前言 今天登上服务器习惯性的升级了yum软件包&#xff0c;结果这一更新后导致Portainer不能正常使用&#xff0c;后续进行成功解决&#xff0c;简单记录一下 解决过程 事故过程模拟 当时顺手升级下docker版本(V26.0.1) 结果Porta…

Golang 状态机设计模式

本文介绍了Golang状态机模式的一个实现示例&#xff0c;通过该模式&#xff0c;可以解耦调用链&#xff0c;有助于实现测试友好的代码&#xff0c;提高代码质量。原文: Go State Machine Patterns 导言 在我们开发的许多项目中&#xff0c;都需要依赖某种运行状态从而实现连续操…

LeetCode-62. 不同路径【数学 动态规划 组合数学】

LeetCode-62. 不同路径【数学 动态规划 组合数学】 题目描述&#xff1a;解题思路一&#xff1a;动态规划&#xff0c;动规五部曲解题思路二&#xff1a;动态规划&#xff08;版本二&#xff09;解题思路三&#xff1a;数论 题目描述&#xff1a; 一个机器人位于一个 m x n 网…

麦肯锡问题分析七步法

麦肯锡七步分析法又称“七步分析法”是麦肯锡公司根据他们做过的大量案例&#xff0c;总结出的一套对商业机遇的分析方法。它是一种在实际运用中&#xff0c;对新创公司及成熟公司都很重要的思维、工作方法。麦肯锡问题分析7步法为企业提供了一个结构化的问题解决框架&#xff…

分类算法(数据挖掘)

目录 1. 逻辑回归&#xff08;Logistic Regression&#xff09; 2. 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 3. 决策树&#xff08;Decision Tree&#xff09; 4. 随机森林&#xff08;Random Forest&#xff09; 5. K近邻&#xff08;K-Nearest …

Mongodb入门--头歌实验MongoDB 复制集 分片

一、MongoDB之副本集配置 1.1MongoDB主从复制 主从复制是MongoDB最早使用的复制方式&#xff0c; 该复制方式易于配置&#xff0c;并且可以支持任意数量的从节点服务器&#xff0c;与使用单节点模式相比有如下优点&#xff1a; 在从服务器上存储数据副本&#xff0c;提高了数…

【已解决】VMware Horizon Client: 无法建立安全加密链路连接

文章目录 问题原因解决方法方法1&#xff1a;在HTTPS拦截中添加VMware忽略列表 (推荐)方法2&#xff1a; 只拦截 浏览器进程的请求 / 取消 HTTPS 拦截&#xff08;如果没有拦截HTTPS的必要 / 只针对浏览器请求&#xff0c;可以使用此方法&#xff09; 当前使用mac 编辑&#xf…

淘宝扭蛋机小程序:扭出惊喜,乐享购物新体验

在快节奏的现代生活中&#xff0c;人们总是在寻找新鲜、有趣的娱乐方式。淘宝扭蛋机小程序应运而生&#xff0c;为您带来前所未有的购物与娱乐结合新体验。在这里&#xff0c;每一次的扭动都充满惊喜&#xff0c;每一次的点击都带来乐趣&#xff0c;让您在购物的同时&#xff0…

OpenResty,Nginx实现接口验签与黑名单控制

介绍 nginx与openresty是两种优秀知名的7层负载均衡软件&#xff0c;nginx以其出色的性能和稳定性成为首选&#xff0c;而openresty则是在Nginx基础上构建的&#xff0c;支持嵌入Lua语言&#xff0c;大幅提升了开发效率。 安装OpenResty 版本 openresty-1.25.3.1-win64下载地…