Array 数组
1.2 创建数组
数组的创建方式一般分为动态初始化和静态初始化
动态初始化
int[] a = new int[5];
静态初始化
int[] b = new int[]{1,2,3,4,5};
int[] c = {1,2,3,4,5};
1.3 创建数组过程分析
程序创建数组 int[] a = new int[5]; 时发生了什么?
在内存中开辟连续的空间,用来存放数据,长度是5
给数组完成初始化过程,给每个元素赋予默认值,int类型默认值是0
数组完成初始化会分配一个唯一的地址值
把唯一的地址值交给引用类型的变量a去保存
数组名是个引用类型的变量,它保存着的是数组的地址,不是数组中的数据
1.4 数组的长度
数组的长度用 length属性来表示,数组一旦创建,长度不可改变
数组的长度允许为0
package cn.tedu.array;
import java.util.Arrays;
public class TestArray {
public static void main(String[] args) {
//需求:分别用数组创建的3中方式,创建char类型的数组,存入单词hello
//1.1静态创建--创建时不仅直到数组的类型,还知道每个位置上的具体元素
char[] c1 = {'h','e','l','l','o'};
System.out.println(c1);//helle
char[] c2 = new char[] {'h','e','l','l','o'};
System.out.println(c2);
char[] c3 = new char[5];
System.out.println(c3);
c3[0] = 'h'; //给数组中第1个元素赋值
c3[1] = 'e'; //给数组中第2个元素赋值
c3[2] = 'l'; //给数组中第3个元素赋值
c3[3] = 'l'; //给数组中第4个元素赋值
c3[4] = 'o'; //给数组中第5个元素赋值
System.out.println(c3);
//1.创建数组
//1.1静态创建--数组类型 数组中具体的元素
char[] a1 = {'h','e','l','l','o'};
char[] a2 = new char[] {'h','e','l','l','o'};
//1.2动态数组--数组类型 数组的长度,后续再给数组中每个位置赋值
char[] a3 = new char[5];
//给数组中每个元素动态赋值
a3[0] = 'h';
a3[1] = 'e';
a3[2] = 'l';
a3[3] = 'l';
a3[4] = 'o';
//2.查看创建好的三个数组
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
String[] s1 = {"a","b","c"};
String[] s2 = new String[] {"a","b","c"};
String[] s3 = new String[3];
s3[0] = "a";
s3[1] = "b";
s3[2] = "c";
System.out.println(s1);//[Ljava.lang.String;@6d06d69c 打印出来的是数组对应的地址值
System.out.println(Arrays.toString(s1));//
System.out.println(Arrays.toString(s2));
System.out.println(Arrays.toString(s3));
//查看数组的长度
System.out.println(c1.length);
System.out.println(s1.length);
int[] i = {5,35,0,65,56,154};
System.out.println(Arrays.toString(i));
Arrays.sort(i);//数组排序
System.out.println(Arrays.toString(i));
}
}
###2.数组的赋值,缩容,扩容
package cn.tedu.array;
import java.util.Arrays;
public class TestCopyOf {
public static void main(String[] args) {
//1.创建数组
int[] from = {1,2,3,4,5};
//2.1数组的普通复制
int[] to = Arrays.copyOf(from, 5);
System.out.println(Arrays.toString(to));
//2.2数组的扩容
int[] to2 = Arrays.copyOf(from, 10);
System.out.println(Arrays.toString(to2));
Arrays.sort(to2);
System.out.println(Arrays.toString(to2));
to2[3] = 6;
System.out.println(to2[3]);
System.out.println(Arrays.toString(to2));
//2.3数组的缩容
int[] to3 = Arrays.copyOf(from, 3);
System.out.println(Arrays.toString(to3));
}
}
###3.数组的遍历
package cn.tedu.array;
import java.util.Arrays;
import java.util.Random;
//需求:输出一年中每个月的天数,比如1月有31天
public class ArraysExecl {
public static void main(String[] args) {
//getMonthDay();//调用自定义方法
//createArray1();//调用自定义创建数组的方法,存入数据1-10
createArray2();//调用自定义创建数组的方法,存入随机数
}
private static void createArray2() {
//1.动态穿件一个长度为6的数组
int[] a = new int[6];
//2.遍历数组,依次给数组的每个位置赋值
for(int i=0;i{31,28,31},{30,31,30},{30,31,31},{31,30,31}};
}
}
###4、数组的冒泡排序
package cn.tedu.array;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
//1.创建一个无序的数组
int[] a = {65,81,35,95,15};
//Arrays.sort(a);
//System.out.println(Arrays.toString(a));
//2.创建自定义排序方法
sortArray(a);
}
private static void sortArray(int[] a) {
//1.外层循环:控制的是比较的轮数,假设有n个数,最多比较n-1轮
//外层循环的循环变量i代表的是轮数
//比如5个数,最多比较4轮,<=a.length-1,最多取到1234共4个值
for(int i=1;i<=a.length-1;i++) {
//2.内层循环:相邻比较
//内层循环的循环变量j代表的是数组的下标
for(int j =0;ja[j+1]) {
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
System.out.println("第"+i+"轮排序的效果:"+Arrays.toString(a));
}
System.out.println("最终效果:"+Arrays.toString(a));
}
}



