声明一个变量就是在内存空间划出一块适合的空间
声明一个数组就是在内存中划出一串连续的空间
数组是相同类型数据的有序集合.
相同类型的若干个数据,按照一定先后次序排列组合而成。
其中,每一个数据称作一个数组元素
每个数组元素可以通过一个下标来访问它们.
数组特点:
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
位置有顺序
数组属引用类型
length, elements of the array
一维数组的声明方式有两种:
type[] arr_name;
type arr_name[];
数组初始化
动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。
int a[] = null;
a = new int[3];
a[0] = 3;
a[1] = 9;
a[2] = 8;
静态初始化:
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
格式: 类型 [] 数组名 = {元素1, 元素2 ……}
int [] a = {1, 2, 3, 4, 5};
静态赋值:就是在程序运行之前,就很明确的知道数组中存放的数据是什么,静态赋值不能先声明后赋值,使用new情况除外
动态初始化:
动态地从键盘录入数组中的元素
int [] score = new int[30];
Scanner input = new Scanner(System.in);
for (int i = 0; i < 30; i++) {
score[i]= input.nextInt()
}
数组的界限
定义并用运算符new为之分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:arrayName[index]
index为数组元素下标,可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 ~ n-1
每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数);
数组的长度: 数组名.length
遍历数组中的元素
for循环
//array.length; 数组中元素的个数
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
加强for循环
//加强for循环 foreach 循环
//int 指的是数组中元素的类型
//i 是迭代变量,就是临时变量array1 是数组的名字
for (int i : array1) {
System.out.println(i);
}
数组的插入
元数组为{12,34,40,65,89},将56插入到数组中,使数组还保持升序
步骤 [12,34,45,65,89,0]
1,找到第一个大于56的数的下标index, 即为56插入的位置
2,创建一个新的数组长度为原数组+1,使用循环,将原数组的元素拷贝至新数组
3,新数组从index开始每个元素都后移一位
4,将56 插入到index位置
package 数组常用的操作;
/**
*
* @author Administrator
*
*/
public class Test02 {
public static void main(String[] args) {
int [] arr01 = {12,34,40,65,89};
//创建一个新的数组,长度为原数组长度加1
int [] arr02 = new int[arr01.length+1];
//将原数组的元素一一拷贝到新数组中
for (int i = 0;i<arr01.length;i++){
arr02[i] = arr01[i];
}
//[2]在arr02找到第一个比56大的数组 保存下标
int index = 0;
for(int i =0;i<arr02.length;i++){
if (arr02[i] >56){
index = i ;
break;
}
}
//[3]从index开始 所有元素都往后移动一位
//[12,34,40,65,89,0]
for (int i =arr02.length-1; i> index ;i--){
arr02[i] = arr02[i-1];
}
//【4】将56插入到index的位置
arr02[index] = 56;
for(int i:arr02){
System.out.println(i);
}
}
}
冒泡排序
package 数组常用的操作;
public class MaoPao {
public static void main(String[] args) {
int [] arr = {91,10,31,109,2,33};
for (int i = 0;i < arr.length-1;i++){
//外层循环循环一次 冒出来一个最值 ,长度为n 的数组 冒出来n-1个最值就可以排好序了
//所以判断条件是i < arr.length-1;
for (int j = 0;j < arr.length-i-1;j++){
//因为外层循环循环一次就冒出来一个最大值 该最大值就不用在参与比较了
//所以判断条件后面要 -i
//又因为在内存循环中每次取出两个元素 一个下标为j 一个下标为j+1
//所以j最大值只能取到arr.length-2;
//j+ 1的值最大就是arr.length -1 就是最后一个元素了
int n1 = arr[j];
int n2 = arr[j+1];
//比较两个元素 如果前者大于后者 则交换位置
if(n1 > n2){
arr[j] = n2;
arr[j+1] = n1;
}
}
}
for(int i :arr){
System.out.println(i);
}
}
}