Java——数组的定义与使用(基本概念、引用分析、初始化方式、二维数组、对象数组)
1、数组的基本概念
数组指的是一组相关变量的集合。Java中,数组属于引用数据类型,所以必然牵扯到内存的关系。对于数组的定义格式包括:
- 声明并开辟数组: 数据类型 数组名称[] = new 数据类型 [长度];
- 分布完成:
- 数据类型 数组名称[] = null;
- 数组名称 = new 数据类型 [长度];
以上可以看出定义格式 和 实例化对象的思路基本一致,eg:
int data[] = new int[3];
data[0] = 10;
data[1] = 20;
data[2] = 30;
以上操作属于数组的动态初始化,其特点是数组开辟空间后,每个数组元素 的内容为对应数据类型的默认值。
通过数组[索引]方式进行数组的访问,索引的范围:0~长度-1;若超过此范围,程序允许时会出现ArrayIndexOutofBoundsException(数组索引超出绑定异常,数组越界)
【数组输出】:使用for循环即可,关键是用数组名.length获取数组的长度,不再代码举例赘述。
2、数组的引用分析
引用数据类型分析基本一致,与对象的流程一样的,唯一的区别就是普通类的对象是保存属性,利用属性名称操作,而数组保存的是内容,利用索引来操作。
【举例】:数组的引用操作
int data[] = new int[3];
data[0] = 10;
data[1] = 20;
data[2] = 30;
int temp[] = data;
temp[0]=100;
for(int i=0;i<data.length;i++){
System.out.print(data[i]+"、");//输出100、20、30
}
3、数组的静态初始化
以上数组的动态初始化,其特点是,先开辟数组内容空间,再进行内容的赋值,若想数组开辟后直接存在明确内容,可以使用数组的静态初始化:
- 简化型 数组类型 数组名称 [] = {值,值,,,,}; (一般不推荐使用)
- 完全型 数组类型 数组名称 [] = new 数据类型[] {值,值,,,,};
【举例】:数组的静态初始化
int data[] = new int[] {10,20,30};
【举例】:判断某个数字是否存在于数组中
int data[] = new int[] {10,20,30};
int x =10;
boolean flag = false;
for(int i=0;i<data.length;i++){
if(data[i]==x){
flag=true;
break;
}
}
if(flag){
System.out.println("数组中存在该数字");
}else{
System.out.println("数组中不存在该数字");
}
但是以上的做法性能不好,它需要将数组中每一个元素遍历判断,直到找到为止。这里涉及到算法的问题,有个查找算法叫二分查找法,但是使用的前提是数组中的数据必须是有序的,二分查找法原理不再赘述了。
4、二维数组
之前使用的数组只有一个索引下标,二维数组有行和列,要想确认一个数据得有行索引 和 列索引。对于二维数组的定义方式:
- 动态初始化: 数据类型 数组名称 [][] = new 数据类型[行个数][列个数];
- 静态初始化:数据类型 数组名称 [][] = new 数据类型[][]{
{数据,,,},{数据,,,},...
};
【举例】:观察二维数组使用
int data[][] = new int[][] {{10,20,30},{11,321,31}};
for(int x=0;x<data.length;x++){
for(int y=0;y<data[x].length;y++){
System.out.print(data[x][y]+"、");
}
System.out.println();
}
【举例】:实现二维数组转置
int data[][] = new int[][] {{1,2,3},{4,5,6},{7,8,9}};
for(int x=0;x<data.length;x++){
for(int y=0;y<=x;y++){
if(x!=y){
int temp = data[x][y];
data[x][y] = data[y][x];
data[y][x] = temp;
}
}
}
以上实际开发中帮助不大,仅训练逻辑思维用。
5、数组相关操作方法
- 数组拷贝:System.arraycopy(原始数组,起始位号,目标数组,起始位号,copy个数);
- 数组排序:Arrays.sort(数组);
具体应用不再赘述了。
6、对象数组
对象数组就是某一个数组中保存的都是对象,对象数组的定义格式:
- 动态初始化: 类名称 对象数组名称 [] = new 类名称[长度];
- 静态初始化: 类名称 对象数组名称 [] = new 类名称[] {实例化对象、实例化对象,....};
【举例】:动态初始化定义数组
Person per[] =new Person[3];
per[0] =new Person("张三",10);
per[1] =new Person("李四",20);
per[2] =new Person("王五",30);
【举例】:静态初始化定义数组
Person per1 =new Person("张三",10);
Person per2 =new Person("李四",20);
Person per3 =new Person("王五",30);
Person per[] =new Person[]{per1,per2,per3};
或者
Person per[] =new Person[]{
new Person("张三",10),
new Person("李四",20),
new Person("王五",30)};
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CAM 系列论文阅读总结
- kafka客户端指标上报Prometheus方案(已开源)
- 2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】...
- R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
- R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风
- R语言对BRFSS数据探索回归数据分析
- 使用R语言创建自定义桑基图Sankey图
- 在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
- R语言中的偏最小二乘回归PLS-DA
- R语言实现偏最小二乘回归法 partial least squares (PLS)回归
- 用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
- python爬虫进行Web抓取LDA主题语义数据分析报告
- Python使用神经网络进行简单文本分类
- 在Python中自然语言处理生成词云WordCloud
- 使用Python中的ImageAI进行对象检测