5.Java中的数组

一、什么是数组?

•数组是相同类型数据的集合,数组的内存存储空间是连续的。
•可以使用以下三种方式声明数组:
数据类型 标识符 [ ];
数据类型 标识符[ ] = new 数据类型[大小];
数据类型 标识符 [ ] = {值 1,值 2,…值 N} ;
•注意:数组是对象属于引用类型;基本数据类型的数组也是对象。

int[ ] students = new int[30];  
int[] numbers = {4,2,9,4,5}; 
//int[] numbers = new int[]{4,2,9,4,5}    ok
// int[] numbers = new int[5]{4,2,9,4,5}  error

二、数组的内存结构

a)一维数组
在这里插入图片描述
b)二维数组
在这里插入图片描述

三、数组的特点

a)数组的内存空间大小固定的,一但JVM为数组分配内存空间就不能再变大或变小。

double[] score; //声明一个整型数组
		score = new double[10];
		score[0] = 77;
		score[1] = 73;
		score[2] = 72;
		score[3] = 70;
		score[4] = 87;
	……
//能不能再重新创建score数组???? 从编程的角度来说是可以的, 但是JVM会将原来分配存放10个double数的空间丢弃,从新分配一块存放20个double数的内存空间
	score = new double[20];

四、数组下标的问题:

a)最小下标为:0;最大下标: 数组标识符.length – 1。
b)下标越界问题:

int[ ] score = new int[2];
          score[0] = 89;
          score[1] = 63;
	  //数组下标越界,在编译时无法发现,只有在运行时报错(运行时异常)
  

score[2] = 45; 
      System.out.println(score[2]);

五、JDK1.5新型的for循环结构:foreach循环

语法:
for(数组元素类型 元素 : 数组){
……
}

示例:

int arr[] = {2, 3, 1}; //定义并初始化一个数组
for(int x : arr){  //x为循环的当前元素
	System.out.println(x); //逐个输出数组元素的值
}

六、排序算法

a)冒泡排序

在这里插入图片描述
在这里插入图片描述
b)选择排序:
在这里插入图片描述

七、二维数组

a)数组的每个元素又是一个一维数组,这样的数组称为二维数组。
b)语法:

//方式1:声明时直接初始化
	//二维数组里的每一个元素是一个一维数
    int[ ][ ] stuScores = { {11,12}, {21,22}, {31,32,33}, {41,42}};
    
//方式2:
Int[ ][ ] stuScores = new int[2][3];

乘法表的实现思路:
//动态分配内存空间
// 1. 首先先动态分配第二维数组的大小,用循环解决,不要像这里这样硬编码
int[][] mulTable = new int[9][ ];
mulTable[0] = new int[1]; //第一行存一个元素
mulTable[1] = new int[2]; //第二行存二个元素
mulTable[2] = new int[3]; //第三行存三个元素

// 2. 给数组的每一行每一列赋值
for(int i=0; i<multiplyTable.length; i++){  //第一维数组的长度
		for(int j=0; j<multiplyTable[i].length; j++){  //第二维数组的长度
			 //……….
		}
}
// 3. 将数组的每一行每一列输出

八、Java.util.Arrays:对数组常用操作的工具类

a)Arrays.toString(数组): 将数组转换成字符串;
b)Arrays.sort(数组): 对数组做自然排序;
c)boolean equals(array1,array2):比较两个数组是否相等;
d)void fill(array,val):把数组array所有元素都赋值为val;
e)copyof(array,length):把数组array复制成一个长度为length的新数组;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值