一、数组:
概念:Array适用于存储多个相同数据的集合。想要获取数组中的元素,可以通过元素的下标来获取,下表是从0开始的。
特点:
1.可以存放多个数据
2.只不过要求数据都是相同的类型
3.数组里的每个数据都有为一亿的标志。叫下标(角标),默认从0开始
4.数组的标志是[],英文是Array
二、数据的创建:
数组类型[] 数组名=初始化
1.静态初始化(比动态初始化多一步完成了动态初始化后赋值)
int[] a=new int[]{1,2,3,4,5};
int[] b={1,2,3,4,5];
2.动态初始化
int[] c=new int[5];
底层发生的事情:
1.在内存中开辟空间,从放数组,长度是5
2给数组中的数据完成初始化,int类型的默认值是0
3给数组分配唯一的地址值
4.在内存中开辟空间,存放引用类型的变量
5.把数组的地址值交给引用类型的变量c保存(引用类型存放的是一个地址值)
练习1:数组中存入hello
package cn.tedu.array;
//这个类用来测试 数组的创建
public class Test6_Array {
public static void main(String[] args) {
//1、创建数组 ,存入hello
//--静态初始化 :一开始刚创建好时,存的都是默认值,char类型默认值是\u0000。
char[] a = new char[] { 'h' , 'e' , 'l' ,'l' ,'o' } ;
char[] b = { 'h' , 'e' , 'l' ,'l' ,'o' } ;
//--动态初始化,需要在创建数组的同时,指定长度!!
char[] c = new char[5];
c[0] = 'h' ; //把下标为0的数据,从默认值\u0000改为'h'
c[1] = 'e' ;//把下标为1的数据,从默认值\u0000改为'e'
c[2] = 'l' ;//把下标为2的数据,从默认值\u0000改为'l'
c[3] = 'l' ;//把下标为3的数据,从默认值\u0000改为'l'
c[4] = 'o' ;//把下标为4的数据,从默认值\u0000改为'o'
//数组的长度如果是5,下标最大值是4的话,有没有下标为5的元素---没有!!!
//java.lang.ArrayIndexOutOfBoundsException:原因就是访问了不存在的下标5
//c[5] = 'x';
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
三、遍历数组
1.语法:
fro(开始位置;循环条件;更改条件){循环体}
for(从下标为0的位置开始;下标的最大值是数组的长度-1;小标自增){循环体}
2.获取数组长度
length属性,可以获取数组的长度
3.练习1:输出每个月的天数
public static void method(){
//创建数组,存放12个数字
int[] a={31,28,31,30,31,30,31,31,30,31,30,31}
//遍历数组
//int i=0 是指从下标0开始,i表示下标
//i <= a.length-1 是指下标最大值是数组的长度-1
//i++ 是指下标一次递增,向后遍历数组
for(int i=0;i<=a.length-1;i++){
System.out.println(i+1 +"月有"+a[i]+"天");
}
}
4.练习1:输出1-10
public static void main(String[] args) {
method();//遍历数组,存入1-10
}
public static void method() {
//1,创建数组,动态初始化
int a[] = new int[10];
//2,遍历数组,根据下标
for(int i=0;i<a.length;i++) {
//3,根据下标获取每个数据,修改成1-10
a[i]=i+1;//a[i]根据下标i获取a数组中的疏忽
}
//4,答应数组的数据(还是需要遍历,输出每个数据)
System.out.println(a);//[I@340f438e 地址值
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);//a[i]根据下标i获取a数组的数据
}
}
四、数组工具类Arrays
1.针对数组的相关操作,提供一系列的支持(一堆方法)
2.常用方法:
toString():把数组的数据变成字符串展示
sort():把无序数组排序
copyOf():复制数组
练习1:
public static void main(String[] args) {
method();//toString():把数组的数据变成字符串展示
method2();//sort():把无序数组排序,从小到大
method3();//copyOf():复制数组
}
public static void method3() {
//创建原数组
//copyOf(m,n)--m是原数组名,n是新数组长度
//其中,第二个参数n,如果新数组的长度》原数组长度,相当于在扩充新位置 -- 扩容
//如果新数组的长度《原数组的持仓度,相当于在截取数据 -- 缩容
int a[] = {1,2,3,4,5};
int[] b=Arrays.copyOf(a, 10);
System.out.println(Arrays.toString(b));//[1,2,3,4,5,0,0,0,0,0]
int[] c=Arrays.copyOf(a, 3);//[1,2,3]
System.out.println(Arrays.toString(c));
}
public static void method2() {
int[] a= {8,5,5,7,4,0};
//自定义排序算法--冒泡排序/快速排序/合并排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));//[0, 4, 5, 5, 7, 8]
}
public static void method() {
int[] a= {1,2,3,4,5};
//以前都想看数组里的数据,只能遍历
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
//现在-使用数组工具类Arrays.toString(a)--把a数组中的所有数组转成字符串展示
System.out.println(Arrays.toString(a));//[1,2,3,4,5]
}