数组变量的声明
变量类型[] 数组名;
dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
double[] myList; // 首选的方法
或
double myList[]; // 效果相同,但不是首选方法
动态初始化
数组类型[] 数组名称 = new 数组类型[数组长度];
int[] a = new int[5];
静态初始化
int[] b = new int[]{1,2,3,4,5};
int[] c = {1,2,3,4,5};
关于数组的打印
关于数组的打印,char类型在底层做了处理,可以直接打印数组中的具体元素,但是除了char类型以外的所有数组,都不可以直接打印数组中的具体内容如果想看查看数组中的具体元素,需要使用工具类Arrays
使用方法Arrays.tostring(数组名)
注意:使用时需要导包
示例
package cn.tedu.array;
import java.util.Arrays;
public class TestCreateArray {
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];//动态,在内存中开辟一段连续的存储空间
/*
* 使用数组下标来操作数组元素,下标由0开始,最大下标等于数组长度-1
*/
c3[0] = 'h';
c3[1] = 'e';
c3[2] = 'l';
c3[3] = 'l';
c3[4] = 'o';
/*
*关于数组的打印,char类型在底层做了处理
*可以直接打印数组中的具体元素,但是除了char类型以外的所有数组,都不可以直接打印数组中的具体内容
*如果想看查看数组中的具体元素,需要使用工具类Arrays
*Arrays.tostring(数组名)
*注意:使用时需要导包
*/
String[] s = {"a","b","c"};
System.out.println(s);//[Ljava.lang.String;@123a439b
for(int i = 0;i < 5;i++) {
System.out.print(c1[i]);
}
System.out.println(Arrays.toString(s));
/*
* 数组一旦创建,长度不可改变
* 可以通过数组名.length获取数组的长度也即元素个数
*/
System.out.println(c1.length);
System.out.println(s.length);
}
}
数组创建过程的分析
如:inta={8,7,65,4};
- 在内存中开辟一块连续的内存空间,长度为5
- 给数组完成初始化的过程,给每个元素赋孤对应类型的默认值,此处是0
- 数组完成初始化后会分配一个唯一的地址值
- 把数组的地址值会交给引用类型的变量a来保存
- 根据下标给每个位置上的元素赋值,此处{8,7,6,5,4}
注意:a是一个引用类型变量,保存的是数组的地址值,不是具体的元素
数组的遍历
- 数组的遍历使用的是fo循环
- for循环的循环变量ⅰ代表的是数组的下标,最小值是0,最大值是 (数组名.length)
- 容易发生 ArraylndexoutofBounds Exception-数组下标越界
示例
```java package cn.tedu.array;
import java.util.Arrays; import java.util.Random; import java.util.Scanner;
/**
- 数组便利 */
public class TestArrayExec { public static void main(String[] args) { m1();//用于打印一年中每个月的天数 m2();//向数组动态存入1-10 m3();//创建随机数组,数组内元素为1-100整数 }
private static void m2() {
int[] a = new int[10];
for(int i = 0;i < a.length;i++) {
a[i] = i + 1;
}
System.out.println(a);
System.out.println(Arrays.toString(a));
}
private static void m3() {
int[] a = new int[10];
for(int i = 0;i < a.length;i++) {
a[i] = new Random().nextInt(100);
}
System.out.println(Arrays.toString(a));
}
private static void m1() {
int[] day = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 0;i < day.length;i++) {
System.out.println(i+1 + "月有" + day[i] + "天");
}
}
}
<a name="vRNjm"></a>
# 数组工具类Arrays
<a name="DQMrZ"></a>
## Arrays.toString(数组)
把数组里的数据,用逗号连接成一个字符串[值1,值2]
<a name="RAlcu"></a>
## Arrays.sort(数组)
对数组进行排序,对于基本类型的数组使用的是优化后的快速排序算法,效率高 <br />对引用类型数组,使用的是优化后的合并排序算法
```java
package cn.tedu.array;
import java.util.Arrays;
public class TestArraySort {
public static void main(String[] args) {
//创建一个无序的数组
int [] a = {21,87,75,23,45};
Arrays.sort(a);
/*
* Arrays.sort(数组名)可以给数组中的元素进行排序
* 影响的是传入的数组,直接更改数组中元素顺序
*/
System.out.println(Arrays.toString(a));
}
}
Arrays.copyOf(数组,新的长度)
把数组赋值成一个指定长度的新数组
新数组的长度 大于 原数组, 相当于复制,并增加位置
新数组的长度 小于 原数组, 相当于截取一部分数据
package cn.tedu.array;
import java.util.Arrays;
public class TestArraysCopyof {
public static void main(String[] args) {
/*
* Arrays.copyOf()用于数组的复制,有两个参数:
* 第一个参数为要复制的数组名
* 第二个参数为新数组的长度
* Arrays.copyOf(要复制的数组长度,新数组的长度);
*/
//原数组
int[] a = {1,2,3,4,5};
//普通复制后的数组
int[] to = Arrays.copyOf(a, 12);
/*
* 数组的缩容--缩小容量
* 先创建长度为3的数组,然后按照个数从from数组中复制数据,类似于截取
*/
int[] to2 = Arrays.copyOf(a, 3);
System.out.println(Arrays.toString(to));
System.out.println(Arrays.toString(to2));
}
}