目录
1.数组的基本概念及作用
数组是有序的元素序列。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
基本特点
1.数组是用于储存多个相同类型数据的集合。
2.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。
3.下标可以是常量,变量,或表达式,但其值必须是整数(如果是小数将四舍五入为整数)。
4.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
2.数组的创建
数组的声明:
1.)数据类型 [ ] 数组名
public class Test {
public static void main(String[] args) {
int [] a;
}
}
2.)数组类型 数组名 [ ]
public class Test {
public static void main(String[] args) {
int a [];
}
}
数组的创建
1.)声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认的初始化值
e.g:int [ ] a = new int [10];
2.)声明数组并分配内存,同时将其初始化
e.g:int [ ] b = new int [ ]{1,2,3};
3.)与前一种方式相同,仅仅只是语法相对简略
e.g:int [ ] c ={1,2,3,4};
3.数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
1.动态初始化
public class Test {
public static void main(String[] args) {
int a [] = new int [10];// 不给数组中各元素赋值,结合for循环等进行赋值
for(int i=0;i<10;i++){
a[i]=i;
}
}
}
当数组采用动态初始化开辟空间之后,数组之中的每个元素都是该数据类型的默认值。
2.静态初始化
public class Test {
public static void main(String[] args) {
int a [] = new int []{1,2,3,4,5};//在创建之初,就为每个元素赋值
}
}
1.)通过数组下标索取来取得元素,下标默认从0开始。数组下标超出数组长度,就会运行异常。
2.)数组的最大缺陷:长度固定(存在越界问题)。
4.数组的遍历
数组的访问
e.g:a[0] , a[3] 数组名[索引]
注意:
- 数组的索引是从0开始的
- 索引的数据是整形
- 索引最大值和数组长度始终差一----(索引最大值=数组长度-1)
数组的遍历
数组的遍历有两种方法:
for循环
public class Test {
public static void main(String[] args) {
int a [] = new int [10];
for(int i=0;i<10;i++){//运用for循环给a数组赋值
a[i]=i;
}
for(int j=0;j<a.length;j++){//运用for循环遍历a数组
System.out.println(a[j]);//数组名称.length:取得数组长度
//(数组长度可以由属性length获得)
}
}
}
增强for循环
public class Test {
public static void main(String[] args) {
int a [] = new int [10];
for(int i=0;i<10;i++){//运用for循环给a数组赋值
a[i]=i;
}
for(int j:a){ //集合或数组a : 数组名称a
System.out.println(j);//运用增强for循环遍历数组a
}
}
}
相对于普通for循环(;;)而言 增强for循环有两个好处:
1.写起来简单容易
2.遍历集合、数组比较简单
增强for循环和普通for循环的区别:
普通for循环可以没有遍历的目标,而增强for循环一定要有遍历的目标。
5.数组的排序
1.冒泡排序
思路:
两两元素相比,前一个比后一个大就交换,直到将最大的元素交换到末尾位置。这是第一趟一共进行n-1趟这样的交换将可以把所有的元素排好。
动画分析:
代码:
public static void main(String[] args) {
int max=0;
int[] a={8,5,6,4,65,3};
for(int m=0;m<a.length-1;m++){
for(int n=0;n<a.length-1-m;n++){
if(a[n]>a[n+1]){
int stmp=a[n];
a[n]=a[n+1];
a[n+1]=stmp;
}
}
}
System.out.println(Arrays.toString(a));
}
2.选择排序
思路:
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,然后选出次小(或次大)的一个元素,存放在最大(最小)元素的下一个位置,重复这样的步骤直到全部待排序的数据元素排完 。
动画:
代码:
public static void main(String[] args) {
int[] num ={29,10,14,37,14,2,8,1,7,6,5};
for (int i = 0; i < num.length; i++) {
//注意min的取值
int min = i;
//j=i;意味着i之前的数都是有序的
for (int j = i; j < num.length; j++) {
if (num[j]<num[min]){
min = j;
}
}
//交换,每一次循环的i都是未排序数据的第一个
int temp = num[i];
num[i] = num[min];
num[min] = temp;
}
System.out.println(Arrays.toString(num));
}