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

Java基础2-数组

数组

一种重要的数据结构,是用来存储同一类型的集合,通过整型下标访问数据;

//创建一个可以存储100个整数的数组
int[] a=new int[100];//两种方式创建,推荐第一种
int[] a;
int a[];//使用for循环来为数组赋值
for(int i=0;i<100;i++)a[i]=i;

数组的大小一旦创建不再改变,如果想在运行过程中扩展数组大小,就应该使用另一种数据结构——数组列表(array list)

初始化方式与匿名数组

在Java中,提供了一种创建数组对对象同时赋予初始值的简化书写形式。下面是一个例子:

int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

注意,在使用这种语句时,不需要显式用 new

甚至还可以初始化一个匿名的数组:

new int[] { 1, 19, 23, 29, 31, 37 };

这表示将创建一个新数组并利用数字中提供的值进行初始化,数组的大小就是初始化的个数。使用这种语法形式可以在不创建新变量的情况下直接初始化一个数组。例如:

smallPrimes = new int[] { 1, 19, 23, 29, 31, 37 };

这是以下语句的简写形式:

int[] anonymous = { 17, 19, 23, 29, 31, 37 };
smallPrimes = anonymous;

For each循环

for(variable : collection) statement;//比如:
for(int element : array){System.out.println(element);
}

可用于:

  • 遍历数组 (如 int[], String[] 等)。
  • 遍历实现了 Iterable 接口的集合类(如 List, Set 等)。

但要注意 在增强 for 循环中,变量是只读的,无法修改原始数组或集合的元素。如果需要修改,必须使用普通的 for 循环;并且增强 for 循环无法直接访问当前元素的索引。如果需要索引,通常需要使用传统的 for 循环。

数组拷贝

可以将一个数组变量拷贝给另一个数组变量,两个变量将指向同一个数组。

//a和b都指向同一个数组
int[] b=a;

如果要将数组的所有值拷贝到新数组去,用到Arrays类的copyOf方法:

//第二个参数是新数组的长度,通常用来增加数组的大小
int[] b=Arrays.copyOf(a,2*a.length);
//a数组的结果为1、3、5;b数组的结果打印为1、3、5、0、0、0

如果数组元素是数值型,多余的元素将被赋值为0;如果是布尔型,则将赋值为false,如果长度小于原始数组,则只拷贝前面部分的数据元素。

Java SE 6之前,数组拷贝是用的System类的arraycopy方法

System.arraycopy(from,fromIndex,to,toIndex,count);

命令行参数

每一个Java应用程序都有一个带String arg[]参数的main方法,表明将会接收一个字符串数组,我们叫做命令行参数。用-g参数使用。

image-20241023203101744

数组排序

Java里要想对数值型数组进行排序,可以不用自己完成排序逻辑,而是直接使用Arrays类中的sort方法

int[] a=new int[10000];
for(){//赋值
}
...
//使用优化的快速排序算法,默认是升序
Arrays.sort(a);

还包含了许多API,参数可以是自定义的一个比较器:

image-20241023203906841

多维数组

声明

//声明1
int[][] aa=new int[5][5];
//声明2
int[][] bb={{16,3,2},{44,23,11},{6,9,32}
};

更高维的类似。

调用API时规则稍有变化,详见API文档。

不规则数组

其实所有的Java数组,不管是多维的还是不规则的,都可以被视作一位数组,本质上没有多维数组,多维数组可以被解释为**“数组的数组”**,下面的不规则数组也可以被视为一维数组,每一行是一个元素,长度不同罢了。

image-20241023204455795
数组,不管是多维的还是不规则的,都可以被视作一位数组,本质上没有多维数组,多维数组可以被解释为**“数组的数组”**,下面的不规则数组也可以被视为一维数组,每一行是一个元素,长度不同罢了。

[外链图片转存中…(img-HkaaYNZX-1730296020925)]


http://www.mrgr.cn/news/62329.html

相关文章:

  • @AutoWired和 @Resource原理深度分析!
  • Electron+Vue3+TS+sqlite3项目搭建加入sqlite3后无法运行问题
  • 国标GB28181视频平台EasyCVR使用obs推流报错“无法找到主机”是什么原因?
  • 开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP
  • SCSS在Vue中切换主题颜色示例(mixin + scss方式,简单高效)
  • 软件工程--需求分析与用例模型
  • Python | Leetcode Python题解之第521题最长特殊序列I
  • C语言 | Leetcode C语言题解之第522题最长特殊序列II
  • C++ | Leetcode C++题解之第522题最长特殊序列II
  • 【多线程场景下事务失效问题如何处理?】
  • 从openjdk17 C++源码角度看 java类成员变量是怎么赋值的
  • 理解环境变量与Shell编程:Linux开发的基础
  • DS18B20+测量系统可编程分辨率高精度数字温度传感器芯片
  • Python——石头剪刀布(附源码+多模式二改优化版)
  • C++学习笔记----9、发现继承的技巧(六)---- 有趣且令人迷惑的继承问题(6)
  • <HarmonyOS第一课>给应用添加通知和提醒的习题
  • VC2012创建弹出式菜单
  • 智能进阶之路:从基础模型到个性化代理—探索Agent与微调的共生之道
  • [专有网络VPC]创建和管理流量镜像
  • 神奇的数据恢复工具:让丢失的数据重现
  • 线上 Dump
  • 【数据结构】链表详解:数据节点的链接原理
  • 积鼎国产CFD软件VirtualFlow新版上线:新增30余项新功能,多相流仿真效率升级
  • C#与C++交互开发系列(十七):线程安全
  • MyBatis-Plus:简化 CRUD 操作的艺术
  • 「动态规划」1/n:什么是动态规划?