Java——数组的定义与使用(基本概念、引用分析、初始化方式、二维数组、对象数组)

举报
Winter_world 发表于 2021/09/28 22:40:10 2021/09/28
【摘要】 目录 1、数组的基本概念 2、数组的引用分析 3、数组的静态初始化 4、二维数组 5、数组相关操作方法 6、对象数组 1、数组的基本概念 数组指的是一组相关变量的集合。Java中,数组属于引用数据类型,所以必然牵扯到内存的关系。对于数组的定义格式包括: 声明并开辟数组: 数据类型 数组名称[] = new 数据类型 ...

目录

1、数组的基本概念

2、数组的引用分析

3、数组的静态初始化

4、二维数组

5、数组相关操作方法

6、对象数组


1、数组的基本概念

数组指的是一组相关变量的集合。Java中,数组属于引用数据类型,所以必然牵扯到内存的关系。对于数组的定义格式包括:

  • 声明并开辟数组: 数据类型 数组名称[] = new 数据类型 [长度];
  • 分布完成:
    • 数据类型 数组名称[] = null;
    • 数组名称 = new 数据类型 [长度];

以上可以看出定义格式 和 实例化对象的思路基本一致,eg:


  
  1. int data[] = new int[3];
  2. data[0] = 10;
  3. data[1] = 20;
  4. data[2] = 30;

以上操作属于数组的动态初始化,其特点是数组开辟空间后,每个数组元素 的内容为对应数据类型的默认值。

通过数组[索引]方式进行数组的访问,索引的范围:0~长度-1;若超过此范围,程序允许时会出现ArrayIndexOutofBoundsException(数组索引超出绑定异常,数组越界)

【数组输出】:使用for循环即可,关键是用数组名.length获取数组的长度,不再代码举例赘述。

2、数组的引用分析

引用数据类型分析基本一致,与对象的流程一样的,唯一的区别就是普通类的对象是保存属性,利用属性名称操作,而数组保存的是内容,利用索引来操作。

【举例】:数组的引用操作


  
  1. int data[] = new int[3];
  2. data[0] = 10;
  3. data[1] = 20;
  4. data[2] = 30;
  5. int temp[] = data;
  6. temp[0]=100;
  7. for(int i=0;i<data.length;i++){
  8. System.out.print(data[i]+"、");//输出100、20、30
  9. }

3、数组的静态初始化

以上数组的动态初始化,其特点是,先开辟数组内容空间,再进行内容的赋值,若想数组开辟后直接存在明确内容,可以使用数组的静态初始化:

  • 简化型    数组类型 数组名称 [] = {值,值,,,,};  (一般不推荐使用)
  • 完全型    数组类型 数组名称 [] = new 数据类型[] {值,值,,,,};

【举例】:数组的静态初始化

int data[] = new int[] {10,20,30};
 

【举例】:判断某个数字是否存在于数组中


  
  1. int data[] = new int[] {10,20,30};
  2. int x =10;
  3. boolean flag = false;
  4. for(int i=0;i<data.length;i++){
  5. if(data[i]==x){
  6. flag=true;
  7. break;
  8. }
  9. }
  10. if(flag){
  11. System.out.println("数组中存在该数字");
  12. }else{
  13. System.out.println("数组中不存在该数字");
  14. }

但是以上的做法性能不好,它需要将数组中每一个元素遍历判断,直到找到为止。这里涉及到算法的问题,有个查找算法叫二分查找法,但是使用的前提是数组中的数据必须是有序的,二分查找法原理不再赘述了。

4、二维数组

之前使用的数组只有一个索引下标,二维数组有行和列,要想确认一个数据得有行索引 和 列索引。对于二维数组的定义方式:

  • 动态初始化: 数据类型 数组名称 [][] = new 数据类型[行个数][列个数];
  • 静态初始化:数据类型 数组名称 [][] = new 数据类型[][]{

                                                                                      {数据,,,},{数据,,,},...

                                                                                      };

【举例】:观察二维数组使用


  
  1. int data[][] = new int[][] {{10,20,30},{11,321,31}};
  2. for(int x=0;x<data.length;x++){
  3. for(int y=0;y<data[x].length;y++){
  4. System.out.print(data[x][y]+"、");
  5. }
  6. System.out.println();
  7. }

【举例】:实现二维数组转置


  
  1. int data[][] = new int[][] {{1,2,3},{4,5,6},{7,8,9}};
  2. for(int x=0;x<data.length;x++){
  3. for(int y=0;y<=x;y++){
  4. if(x!=y){
  5. int temp = data[x][y];
  6. data[x][y] = data[y][x];
  7. data[y][x] = temp;
  8. }
  9. }
  10. }

以上实际开发中帮助不大,仅训练逻辑思维用。

5、数组相关操作方法

  • 数组拷贝:System.arraycopy(原始数组,起始位号,目标数组,起始位号,copy个数);

  • 数组排序:Arrays.sort(数组);

具体应用不再赘述了。

6、对象数组

对象数组就是某一个数组中保存的都是对象,对象数组的定义格式:

  • 动态初始化: 类名称 对象数组名称 [] = new 类名称[长度];
  • 静态初始化:    类名称 对象数组名称 [] = new 类名称[] {实例化对象、实例化对象,....};

【举例】:动态初始化定义数组


  
  1. Person per[] =new Person[3];
  2. per[0] =new Person("张三",10);
  3. per[1] =new Person("李四",20);
  4. per[2] =new Person("王五",30);

【举例】:静态初始化定义数组


  
  1. Person per1 =new Person("张三",10);
  2. Person per2 =new Person("李四",20);
  3. Person per3 =new Person("王五",30);
  4. Person per[] =new Person[]{per1,per2,per3};

或者


  
  1. Person per[] =new Person[]{
  2. new Person("张三",10),
  3. new Person("李四",20),
  4. new Person("王五",30)};

 

作于202003281600,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。

原文链接:winter.blog.csdn.net/article/details/105083592

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。