java数组

数组概念

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组一旦初始化,长度不可变。长度确定下来了!

一维数组声明

一维数组的声明方式: 类型  数组名[] 或 类型[]  数组名;
    例如:
        int a[];
        int[] a1;
        double  b[];
        Date[]c;      //对象数组
单独声明数组时不能指定其长度(数组中元素的数), 例如: 
int a[5];    //非法
这两种定义做完了,数组中是没有元素值的

数组的初始化

Java中的数组必须先初始化,然后才能使用
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
Java中可以使用关键字new创建数组对象,完成静态初始化或动态初始化
 

动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数
举例:
int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值

输出数组中元素的值

定义并用运算符new为之分配空间后,才可以引用数组中的某个元素;
每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)
数组名和编号的配合就可以获取数组中的指定编号的元素。这个编号的专业叫法:索引(下标)。
数组元素的引用方式:数组名[数组元素下标]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i]
数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 至 n-1

内存结构

动态初始化数组时,由系统给出初始值,初始值为0。
看下图所示

案例

静态初始化

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法:
int[] arr = {1,2,3};

案例

注意

int[] a = new int[];   new的时候就要分配内存,不指定就不知道分配多少
数组一旦初始化,长度不可变。长度确定下来了!!!
int[] a ={1,2,3};也可以
int[] a
a={1,2,3};错误

数组常见问题

数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时

 

多维数组

二维数组[][]:数组中的数组

格式1(动态初始化)int[][] arr = new int[3][2];

 定义了名称为arr的二维数组

 二维数组中有3个一维数组

 每一个一维数组中有2个元素

 一维数组的名称分别为arr[0], arr[1], arr[2]

 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

格式2(动态初始化)int[][] arr = new int[3][];

 二维数组中有3个一维数组。

 每个一维数组都是默认初始化值null (注意:区别于格式1

 可以对这个三个一维数组分别进行初始化

  arr[0] = new int[3];    arr[1] = new int[1];   arr[2] = new int[2];

注:

int[][]arr = new int[][3];  //非法

格式3(静态初始化)int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};

 定义一个名称为arr的二维数组,二维数组中有三个一维数组

 每一个一维数组中具体元素也都已初始化

 第一个一维数组 arr[0] = {3,8,2};

 第二个一维数组 arr[1] = {2,7};

 第三个一维数组 arr[2] = {9,0,1,6};

 第三个一维数组的长度表示方式:arr[2].length;

Ø 注意特殊写法情况: int [] x,y []; x 是一维数组, y 是二维数组。
Ø Java 中多维数组 必都是规则矩阵形式

数组排序

冒泡排序

我们的的数组常常是无序的,如何对数组排序也是我们必须要掌握的。排序的方法也有很多种,在这里我们介绍一下冒泡排序法。

 冒泡排序的基本思路:假设要被排序的数组arr[0…n-1]是垂直放置的,我们将其中的每个元素都看成重量为arr[i]的气泡。那么,根据常识,我们知道重量轻的气泡会向上冒。所以我们制定轻气泡不能在重气泡下的原则。现在,我们从下向上扫描数组arr[n]中的每个元素,凡是发现违反本原则的轻气泡,就使其向上“冒”,反复的执行这个过程,直到所有元素都满足该原则。

冒泡算法原理

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
  
12,15,9,5,29,37

 

冒泡排序效果

如何用二重循环将5个数字排序?N = 5

5个数字存放在一维数组中
外层循环控制比较多少轮,循环变量 i
内层循环控制每轮比较多少次,循环变量 j

 

代码框架

关键代码分析:5个学生成绩排序

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值