1.开辟连续的内存空间
2.给数组每个位置的数据初始化,默认值为0
3.数组a保存的是数据的地址值,并不是元素。
4.如果操作数据,需要用下标0开始。数组下标是最大长度减去1。
数组的三种创建方法。
动态创建和静态创建
package cn.qxy.TestCreatArrary;
import com.sun.javaws.IconUtil;
import java.util.Arrays;
/**
* 创建数组
* 1.静态初始化
* int[] b = new int[]{1,2,3,4,5};
* int[] c = {1,2,3,4,5};
* 2.动态初始化
* int[] a = new int[5];
* 我们通过数组的下标来操作数组中的每一个元素
* 注意:数组的下标从0开始,最大下标为数组的长度-1;
*/
public class shuzu {
public static void main(String[] args) {
char[] c1={'h','e','l','l','o'};
char[] c2=new char[]{'h','e','l','l','o'};
char[] c3=new char[5];//创建一个长度为5额数组
c3[0]='h';
c3[1]='e';
c3[2]='l';
c3[3]='l';
c3[4]='0';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
String[] s={"秦晓燕","是仙女"};
String[] s1=new String[]{"泡泡老师","也是仙女"};
String[] s2=new String[3];
s2[0]="哈哈哈";
s2[1]="我也是";
s2[2]="仙女";
/**
* char类型的数组底层中做了处理,可以直接打印数组中的具体元素
* 但除了char类型以外的数组,如果想要查看数组中的具体元素,需要使用Arrarys.toString(数组名),注意:Arrarys需要导包。
* 数组的长度就是数组中存放元素的个数。
* 数组一旦创建,长度不可改变
* 如果想要增加或者删除数组中的元素,只能先创建一个新长度的新数组,再将原来的数组复制过去。
*/
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
System.out.println(Arrays.toString(s));
System.out.println(Arrays.toString(s1));
System.out.println(Arrays.toString(s2));
}
}
hello
hello
hell0
[Ljava.lang.String;@1b6d3586
[Ljava.lang.String;@4554617c
[Ljava.lang.String;@74a14482
[秦晓燕, 是仙女]
[泡泡老师, 也是仙女]
[哈哈哈, 我也是, 仙女]
Arrays.copyOf(数组,新的长度)
把数组赋值成一个指定长度的新数组
新数组的长度 大于 原数组, 相当于复制,并增加位置
新数组的长度 小于 原数组, 相当于截取一部分数据
package cn.qxy.TestCreatArrary;
import sun.plugin.javascript.navig.Array;
import java.util.Arrays;
/**
* 本类用于练习数组的复制,缩容,扩容
* 大驼峰:第一个首字母大写
* 小驼峰:第二个首字母大写
*/
public class dkoekel {
public static void main(String[] args) {
int[] from={1,2,3,4,5};
/**1。数组的普通复制
* 参数1:要复制那个数组
* 参数2:新数组的长度
* 如果新数组的长度等于原数组的长度,即简单的复制。
*/
int[] to= Arrays.copyOf(from,5);
/**
* //不能直接打印to,因为是地址值
*/
System.out.println(Arrays.toString(to));
System.out.println(Arrays.toString(from));
/**
* 扩容:扩容数组的容量:新数组的长度>原数组的长度
*思路:先创建对应新长度的新数组,每个位置上都有默认值
* 然后从原数组中将对应的元素复制到新数组,没有被覆盖的位置还是原来的默认值。
*/
int[] to2=Arrays.copyOf(from,10);
System.out.println(Arrays.toString(to2));
/**
* 缩容
*/
int[] s9=Arrays.copyOf(from,3);
System.out.println(Arrays.toString(s9));
}
}
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
[1, 2, 3]
数组的遍历
package cn.qxy;
import java.util.Arrays;
public class ArrayExec {
/**
* 本类用于练习数组的遍历
* 要求:输出一年中每个月的天数,比如:1月有31天。
*/
public static void main(String[] args) {
getMonthDay();
creatArrary();
}
private static void creatArrary() {
//创建数组,动态创建,输出1-10的数
int[] a=new int[10];
for (int i = 0; i <=a.length-1 ; i++) {
a[i]=i+1;
}
System.out.println();
System.out.print(Arrays.toString(a));
}
private static void getMonthDay() {
//1.创建一个数组,用来保存12个月的天数
int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
//2.输出每个月的天数到控制台
/**
* 此数的循环变量i代表的是数组的下标a[a.length-1],如何变化,i++
*/
for (int i = 0; i <=day.length-1 ; i++) {
System.out.print("第"+(i+1)+"月:"+day[i]+" ");
}
}
}
第1月:31 第2月:28 第3月:31 第4月:30 第5月:31 第6月:30 第7月:31 第8月:31 第9月:30 第10月:31 第11月:30 第12月:31
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
package cn.qxy;
import java.util.Arrays;
import java.util.Random;
public class ArrayExec {
/**
* 本类用于练习数组的遍历
* 要求:输出一年中每个月的天数,比如:1月有31天。
*/
public static void main(String[] args) {
//getMonthDay();
//creatArrary();
creatArrary2();
}
private static void creatArrary2() {
int[] arr=new int[6];
for (int i = 0; i <=arr.length-1 ; i++) {
/**
* 给数组上的元素赋值
* 这个100是自定义的数
*/
arr[i]=new Random().nextInt(100);
}
System.out.println(Arrays.toString(arr));
}
private static void creatArrary() {
//创建数组,动态创建,输出1-10的数
int[] a=new int[10];
for (int i = 0; i <=a.length-1 ; i++) {
a[i]=i+1;
}
System.out.println();
System.out.print(Arrays.toString(a));
}
private static void getMonthDay() {
//1.创建一个数组,用来保存12个月的天数
int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
//2.输出每个月的天数到控制台
/**
* 此数的循环变量i代表的是数组的下标a[a.length-1],如何变化,i++
*/
for (int i = 0; i <=day.length-1 ; i++) {
System.out.print("第"+(i+1)+"月:"+day[i]+" ");
}
}
}
[64, 65, 44, 83, 42, 0]
package cn.qxy.TestCreatArrary;
import java.util.Arrays;
public class maopao {
public static void main(String[] args) {
int[] a={1,20,45,6,5};
sormaopao(a);
}
private static void sormaopao(int[] a) {
/**
* 1.外层循环:控制的是比较的轮数,假设有n个数,最多比较n-1轮
* 外层循环的循环的变量代表的是轮数。length-1轮
* 比如5个数,最多比较4轮,<=length-1,最多渠道1234共4个值。
* 2.内层循环:j代表的是下标
*/
int temp = 0;
for (int i =1; i <=a.length-1 ; i++) {
for (int j =0; j<=a.length-1-1 ; j++) {
//j代表下标,j.length-1,是最后一个数的下标,最后一个数不需要参与比较
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
System.out.println("第"+i+"轮"+Arrays.toString(a));
}
System.out.println(Arrays.toString(a));
}
}
第1轮[1, 20, 6, 5, 45]
第2轮[1, 6, 5, 20, 45]
第3轮[1, 5, 6, 20, 45]
第4轮[1, 5, 6, 20, 45]
[1, 5, 6, 20, 45]