当前位置: 首页 > news >正文

【疯狂Java】数组

 1、一维数组

(1)初始化

①静态初始化:只指定元素,不指定长度

new 类型[] {元素1,元素2,...}

int[] intArr;
intArr = new int[] {5,6,7,8};
②动态初始化:只指定长度,不指定元素

new 类型[数组长度] 

int[] princes = new int[5];

【注意】

- 如果数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值为0

- 如果数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值为0.0

- 如果数组元素的类型是基本类型中的字符类型(char),则数组元素的值为'\u0000'

- 如果数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值为false

- 如果数组元素的类型是引用类型(类、接口和数组),则数组元素的值为null

(2)使用数组

①length

该属性返回数组的长度

②访问数组元素

索引从0开始,最后一个元素的索引是length-1

使用的元素超出数组长度,就会导致ArrayIndexOutOfBoundsException(数组索引越界异常)

③遍历数组

④foreach循环遍历数组

数组有几个元素,该循环就执行几次,变量会自动、依次等于每个元素

foreach循环只能访问数组元素的值,不能修改数组元素的值。

for(元素类型 变量名 : 数组名)
{//可通过变量名访问每个元素
}
int[] iArr = new int[] {20,30,40,50};
for (int it : iArr) {System.out.println(it);
}

建议:永远不要在foreach循环中修改循环计算器的值

(3)深入理解数组

【Java程序,必须要使用虚拟机Virtual Machine(有些地方也称之为JVM)才能运行】

Java程序的内存可分为:

①堆(heap)内存:Java虚拟机启动时分配的一块永久的、很大的内存区。堆内存只有一块。

堆内存中对象,如果没有引用变量指向它,那么它就会变成垃圾,等待VM的垃圾回收器来回收。

public class 内存中的数组 {public static void main(String[] args) {//分配800个字节long[] arr = new long[100];arr[99] = 33;System.out.println(arr[99]);}
}

由于long数组需要分配800个字节,而虚拟机只有258个字节,所以报错“初始堆内存给的太少了”

②栈(stack)内存:每次方法运行分配一块临时、很小的内存区。每个方法都有自己对应的栈区,方法结束时,对应的栈区就会被回收。

- 在方法中定义的、局部变量(不管是什么类型),都放入对应的方法栈区。

- new出来的对象,都放在堆内存。

引用类型的变量是变量,对象是对象,两者是不同的东西。

例如:

int[] iArr = new int[4];

iArr存在栈内存中,new出来的int[4]存在堆内存中。

【变量赋值的区别】

- 基本类型的赋值:直接将该值存入变量所在内存。

- 引用类型的赋值:将该对象所在第一个内存单元的编号(内存地址)存入变量。

下面使用代码+图来演示:

public class 内存中的数组 {public static void main(String[] args) {//基本类型的赋值int it = 20; //4个字节//iArr在栈内存,new出来的数组对象在堆内存int[] iArr = new int[4]; //数组占16个字节}
}

public class 内存中的数组 {public static void main(String[] args) {//基本类型的赋值int it = 20; //4个字节//iArr在栈内存,new出来的数组对象在堆内存int[] iArr = new int[4]; //数组占16个字节System.out.println(iArr.length);//再次对引用变量赋值,让iArr重新指向一个新的数组iArr = new int[] {20,10};System.out.println(iArr.length);}
}

 

【验证自己是否真的理解基本类型和引用类型】

阅读一下代码,说出每个输出语句的输出结果。

public class 基本类型和引用类型 {public static void main(String[] args) {int a = 20;int b = a;System.out.println("a:" + a);System.out.println("b:" + b);b = 13;System.out.println("a:" + a);System.out.println("b:" + b);int[] arr = new int[] {20};int[] brr = arr;System.out.println("arr[0]:" + arr[0]);System.out.println("brr[0]:" + brr[0]);brr[0] = 13;System.out.println("arr[0]:" + arr[0]);System.out.println("brr[0]:" + brr[0]);}
}

答案与解析:

package day04;public class 基本类型和引用类型 {public static void main(String[] args) {int a = 20;int b = a;//基本类型赋值:直接将值存入变量所在的内存System.out.println("a:" + a);//20System.out.println("b:" + b);//20b = 13;//将13存入b所在的内存System.out.println("a:" + a);//20System.out.println("b:" + b);//13int[] arr = new int[] {20};//引用类型赋值:将该对象所在首地址存入变量int[] brr = arr;//引用类型赋值:将该对象所在首地址存入变量System.out.println("arr[0]:" + arr[0]);//20System.out.println("brr[0]:" + brr[0]);//20brr[0] = 13;System.out.println("arr[0]:" + arr[0]);//13System.out.println("brr[0]:" + brr[0]);//13}
}

 2、没有多维数组

其实只有一维数组,二维数组是假象。

二维数组的本质:数组元素为一维数组的数组。

(1)初始化

①静态初始化

new 类型[]...[] {元素1,元素2,...}

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

②动态初始化

new 类型[数组长度]...[数组长度]

int[][] arr = new int[5][];

 ③静态和动态混着用

public class 二维数组静态初始化 {public static void main(String[] args) {//静态int[][]	arr = new int[][] {new int[2],//元素用动态创建new int[3],new int[4] };System.out.println(arr.length);//静态int[][]	brr = new int[][] {new int[] {1,2},//元素用静态创建new int[] {3,4,5},new int[] {6,7,8,9} };System.out.println(brr.length);//静态int[][] crr = new int[][] {new int[4],//元素用动态创建{1,2,3},//元素用静态的简化语法创建new int[3]//元素用动态创建};System.out.println(crr.length);}
}

 ④二维数组简化初始化

//创建一个长度为4的数组,其中每个元素都是动态初始化的长度为5的数组
int[][] arr = new int[4][5];
//相当于
int[][] brr = new int[][] {new int[5],new int[5],new int[5],new int[5],new int[5],
};

(2)对数组元素赋值

【常见错误】

int[][] arr = new int[5][];//对数组元素赋值
//arr[0]是数组元素,是int[]类型,20是int
arr[0] = 20;

(3)使用数组

遍历

int[][]	arr = new int[][] {new int[2],//元素用动态创建new int[3],new int[4] 
};for (int i = 0; i < arr.length; i++) {//arr[i]是int[]类型int[] brr = arr[i];for (int j = 0; j < brr.length; j++) {System.out.print(brr[j] + "\t");}System.out.println();
}

相关文章:

【疯狂Java】数组

1、一维数组 (1)初始化 ①静态初始化&#xff1a;只指定元素&#xff0c;不指定长度 new 类型[] {元素1,元素2,...} int[] intArr; intArr new int[] {5,6,7,8}; ②动态初始化&#xff1a;只指定长度&#xff0c;不指定元素 new 类型[数组长度] int[] princes new in…...

leetcode 503. 下一个更大元素 II、42. 接雨水

下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&…...

【德哥说库系列】-PostgreSQL跨版本升级

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

rust学习——智能指针

智能指针 在各个编程语言中&#xff0c;指针的概念几乎都是相同的&#xff1a;指针是一个包含了内存地址的变量&#xff0c;该内存地址引用或者指向了另外的数据。 在 Rust 中&#xff0c;最常见的指针类型是引用&#xff0c;引用通过 & 符号表示。不同于其它语言&#xf…...

系列一、Spring Framework

一、谈谈你对Spring的理解 Spring是一个生态&#xff0c;是一个轻量级的开源容器框架&#xff0c;可以构建Java应用所需要的一切基础设施&#xff0c;它的出现是为了解决企业级应用开发中业务逻辑层和其他各层对象与对象之间耦合的问题&#xff0c;通常情况下所说的Spring是指S…...

PULP Ubuntu18.04

1. 安装eda工具&#xff1a;questasim_10.7_linux64&#xff0c;网上有教程和方法&#xff0c;如有问题&#xff0c;可私信我 2. 代码下载&#xff1a; git clone https://github.com/pulp-platform/pulp 编译代码 cd pulp source setup/vsim.sh make checkout make scripts …...

Docker harbor私有仓库部与管理

目录 搭建本地私有仓库 Docker容器的重启策略 Harbor 简介 什么是Harbor Harbor的特性 Harbor的构成 Docker harbor私有仓库部署 Harbor.cfg配置文件中的参数 维护管理Harbor 总结 搭建本地私有仓库 #首先下载 registry 镜像 docker pull registry#在 daemon.json …...

解决虚拟机联网问题

虚拟机开机后发现右上角缺少联网标志(下面有正常联网标志)&#xff0c;这样就是连不上网的 不信你可以打开Ubuntu里面的浏览器或ping www.baidu.com 1.编辑虚拟机设置-->网络适配器-->如图所示 2.选择编辑-->虚拟网络编辑器 3.更改设置 4此处可以选择还原默认设置&am…...

Unity 自定义小地图

最近工作做了个小地图&#xff0c;再此记录下思路。 1、准备所需素材 显示为地图&#xff08;我们取顶视图&#xff09;。创建一个Cube&#xff0c;缩放到可以把实际地图包住。实际地图的尺寸和偏移量 。我这里长宽都是25&#xff0c;偏移量&#xff08;1&#xff0c;0&…...

力扣每日一题66:加一

题目描述&#xff1a; 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输…...

项目管理工具ConceptDraw PROJECT mac中文版自定义列功能

ConceptDraw PROJECT Mac是一款专业的项目管理工具&#xff0c;适用于MacOS平台。它提供了成功规划和执行项目所需的完整功能&#xff0c;包括任务和资源管理、报告和变更控制。 这款软件可以与ConceptDraw office集成&#xff0c;利用思维导图和数据可视化的强大功能来改进项目…...

Kafka-Java二:Spring实现kafka消息发送的ack机制

写在前面 如果只有一个kafka实例的话&#xff0c;那么文章中提到kafka集群kafka实例 一、什么是消息发送者端的ack机制 ack机制&#xff1a;消息确认发送成功的标识 由谁发起该标识&#xff1a;kafka集群 发起该标识的场景&#xff1a;kafka集群确认已经收到了消息。 由谁接收…...

Go代码解密:理解byte和int8的边界行为

今天看到一个很有意思的 Golang 代码&#xff0c;最后的输出结果为 4&#xff1a; func main() {count : 0for i : range [256]struct{}{} {m, n : byte(i), int8(i)if n -n {count}if m -m {count}}fmt.Println(count) // 输出为 4 }原因如下 当 i 0 时&#xff0c;n -n …...

Mac M1下使用Colima替代docker desktop搭建云原生环境

文章目录 为什么不使用docker desktop1.docker desktop卸载2.docker、docker compose安装3.colima安装3.1获取镜像地址3.2将下载好的iso文件放到colima指定路径3.3重新执行colima start 4.minikukekubernetes安装5.关闭minikube Mac M1下使用Colima替代docker desktop搭建云原生…...

Non-constant range: argument must be an integer literal

更新 Xcode IDE 后 ForEach 方法抛出了如下异常 Non-constant range: argument must be an integer literal 新增了指向性 id 参数 init(_:content:) 原始方法 ForEach(0 ..< pickerTitleColors.count) {Text(self.pickerTitleColors[$0]).tag($0).foregroundColor(self.…...

TCP网络通信

TCP通信的 实现发1收1 package TCP1;//完成TCP通信的 实现发1收1import java.io.DataOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class Client {public static void main(S…...

echarts中,X轴名称过长隐藏,鼠标hove显示全称

echarts中&#xff0c;X轴名称过长隐藏&#xff0c;鼠标hove显示全称&#xff1a; <div id"main" :style"{ width: 100%, height: 100% }"></div>option: {title: {text: 重点物料库存预警,left: center},tooltip: {trigger: axis,axisPointer…...

laravel框架介绍(二) 打开站点:autoload.php报错

Laravel&#xff1a;require..../vendor/autoload.php错误的解决办法 打开站点&#xff1a;http://laraveltest.com:8188/set_api-master/public/ set_api-master\public\index.php文件内容为&#xff1a; 解决办法&#xff1a; 1. cd 到该引用的根目录&#xff0c;删除 compo…...

reactNative导入excel文件

组件内导入 import {TouchableOpacity,PermissionsAndroid} from react-native; import RNFS from react-native-fs; import XLSX from xlsx; import DocumentPicker from react-native-document-picker; import {Buffer} from buffer;// 需要安装一下三个,Buffer和react-nati…...

mysql 命令行安装

一、安装包下载 1、下载压缩包 &#xff08;1&#xff09;公众号获取 关注微信公众号【I am Walker】&#xff0c;回复“mysql”获取 &#xff08;2&#xff09;官网下载 安装地址MySQL :: Download MySQL Community Server ​ ​ 二、解压 下载完之后进行解压&…...

告别串口线!用STM32CubeMX配置USB-CDC虚拟串口,实现与电脑免驱动通信(附Win7驱动安装指南)

STM32虚拟串口革命&#xff1a;USB-CDC免驱动通信全实战指南 嵌入式开发调试过程中&#xff0c;最令人头疼的莫过于频繁插拔串口线导致的接口松动、接触不良问题。传统串口调试不仅占用宝贵的UART资源&#xff0c;还常常因为物理连接问题浪费大量调试时间。本文将彻底改变这一局…...

C语言结构体、枚举、联合体:从内存布局看区别,新手避坑指南

C语言结构体、枚举、联合体&#xff1a;从内存布局看区别&#xff0c;新手避坑指南 在C语言开发中&#xff0c;结构体、枚举和联合体是构建复杂数据模型的三大基石。但很多开发者在实际项目中常遇到这样的困惑&#xff1a;为什么结构体占用的内存比预期大&#xff1f;枚举变量在…...

基于Docker部署OpenOffice无头服务实现文档自动化处理

1. 项目概述与核心价值最近在折腾文档处理自动化流程&#xff0c;发现很多老项目或者特定场景下&#xff0c;对Office文档的兼容性要求极高&#xff0c;尤其是那些需要处理.doc、.xls、.ppt等老格式的场景。直接用现代办公套件&#xff08;比如LibreOffice&#xff09;去处理&a…...

别再手动调色了!用Matlab bar3函数一键生成论文级渐变三维柱状图(附完整代码)

别再手动调色了&#xff01;用Matlab bar3函数一键生成论文级渐变三维柱状图&#xff08;附完整代码&#xff09; 科研图表的美观程度直接影响论文的第一印象&#xff0c;而三维柱状图在展示多维度数据时尤为常见。传统手动调整每个柱体的颜色、透明度、光照效果不仅耗时&#…...

gnamiblast-skill:基于技能化与管道化的智能文本处理工具解析

1. 项目概述与核心价值最近在GitHub上闲逛&#xff0c;又发现了一个挺有意思的项目&#xff0c;叫gabrivardqc123/gnamiblast-skill。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;gnamiblast听起来像是个自造词&#xff0c;skill又指向了某种技能或功能。作为一名常…...

C# AI开发实战:BotSharp框架构建企业级NLP应用指南

1. 项目概述&#xff1a;当C#开发者遇上AI应用开发如果你是一名长期深耕.NET生态的开发者&#xff0c;最近看着Python在AI领域风生水起&#xff0c;心里是不是有点痒&#xff0c;又有点不甘&#xff1f;总觉得为了跑个模型、搭个智能对话&#xff0c;就得切到另一个完全不同的技…...

Claude API钩子框架设计:非侵入式中间件与生命周期管理实践

1. 项目概述与核心价值最近在折腾一些AI应用开发&#xff0c;发现一个挺有意思的现象&#xff1a;很多开发者想给Claude API的调用过程加点“料”&#xff0c;比如在请求发出前或收到响应后&#xff0c;自动执行一些自定义逻辑。可能是为了日志记录、数据清洗、请求重试&#x…...

基于RAG与智能体技术构建专业客服AI:从知识注入到流程执行

1. 项目概述&#xff1a;一个面向客服场景的AI智能体指南最近在GitHub上看到一个挺有意思的项目&#xff0c;叫mrqhocungdungai-vn/hermes-cskh-guide。从名字就能猜个大概&#xff0c;这是一个关于“Hermes”的客服&#xff08;CSKH&#xff09;指南&#xff0c;而且看起来是越…...

FPGA与GPU在OSOS-ELM算法中的性能对比与优化

1. 项目概述在边缘计算和实时信号处理领域&#xff0c;极端学习机(ELM)因其独特的训练机制和高效的计算性能而备受关注。OSOS-ELM作为ELM的一种变体&#xff0c;通过在线顺序学习机制进一步提升了算法的实用性。这项研究聚焦于FPGA和GPU两种硬件平台在执行OSOS-ELM算法时的性能…...

017、Docker在TinyML开发中的应用

017 Docker在TinyML开发中的应用 从一次“环境地狱”说起 上个月帮团队调一个STM32上的TinyML推理延迟问题,模型是MobileNetV2量化版,在开发板上跑得好好的,换到同事的Ubuntu 20.04机器上编译,死活链接不上CMSIS-NN库。折腾半天发现他系统里默认的arm-none-eabi-gcc版本是…...