简介
数组是一种容器,可以保存多个数据值。
特点:
1.数组是引用数据类型
2.数据中的多个数据,类型必须相同
3.数据长度在程序运行期间不可改变
创建数组
动态初始化
指定长度
格式:
数据类型[] 数组名称 = new 数据类型[数组长度];
左侧数据类型:是数组中保存的数据是什么类型
左侧中括号:代表我是一个数组
右侧的new:代表创建数组的动作
右侧数组类型:必须和左边的数据类型一致
数组长度:可以保存多少个数据
示例:
// 动态初始化
public class DynamicArray {
public static void main(String[] args) {
// 创建一个可以存放300个int类型数据的数组
int[] arr1 = new int[300];
double[] arr2 = new double[10];
String[] arr3 = new String[20];
}
}
静态初始化
指定内容
格式:
数组类型[] 数组名称 = new 数组类型[] {元素1, 元素2, ...}
// 省略格式
数组类型[] 数组名称 = {元素1, 元素2, ...}
例子:
/*
静态初始化数组
*/
public class StaticArray {
public static void main(String[] args) {
int[] arr1 = new int[] {5, 6, 7};
String[] arr2 = new String[] {"hello", "world"};
// 省略格式
int[] arr3 = {1, 2, 3};
}
}
注意:
1.虽然静态初始化没有直接告诉长度,但是可以根据后面的元素推算出来
2.动态初始化会给每个元素一个默认值,后面会再说
2.动态初始化和静态初始化可以拆分两个步骤,但是静态初始化使用省略格式就不能拆分了
/*
拆分写法
*/
public class SplitInitArray {
public static void main(String[] args) {
int[] arr1 = new int[300];
// 等同于下面
int[] arr2;
arr2 = new int[300];
int[] arr3 = new int[] {5, 6, 7};
// 等同于下面写法
int[] arr4;
arr4 = new int[] {5, 6, 7};
}
}
使用建议:如果不确定数组内容使用动态初始化,已经知道具体内容使用静态初始化。
数组操作
索引
数组是有顺序的,所以每个元素有一个索引,代表从左到右的位置,但是注意索引是从0开始的,也就是第一个元素的索引值是0。通过索引,就可以拿到数组指定位置的元素。
数组索引单位是0到数组长度-1,只能在这个范围索引,否则越界会报错。
public class Index {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30, 40};
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println(arr1[3]);
System.out.println(arr1[4]);
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
// at Index.main(Index.java:12)
}
}
修改元素
前面说过,在使用动态初始化时,会给每个元素一个初始值,初始值根据不同的数组类型也不同:
- 整数类型,默认为0
- 浮点类型,默认为0.0
- 字符类型,默认为’\u0000’
- 布尔类型,默认为false
- 引用类型,默认为null
还可以通过索引来修改指定位置的元素:
public class Test {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30, 40};
System.out.println(arr1[0]);
arr1[0] = 1;
System.out.println(arr1[0]);
}
}
数组长度
数组.length
/*
获取数组长度
*/
public class ArrayLength {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30, 40};
System.out.println(arr1.length);
}
}
注意:
1.数组一旦创建,运行期间长度不可改变
数组遍历
/*
数组遍历
*/
public class ForEach {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6};
// 根据数组长度遍历数组
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
System.out.println("---------");
// 新语法
for (int element:arr1) {
System.out.println(element);
}
}
}
数组反转
public class ArrayReverse {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 开始反转
for (int left = 0, right = arr.length - 1; left < right; left++, right--) {
int tem = arr[left];
arr[left] = arr[right];
arr[right] = tem;
}
System.out.println("-----反转后-----");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
Arrays
是一个与数组有关的工具类,提供了大量的静态方法,实现数组相关操作。
toString(数组)
:将参数数组转为字符串
sort(数组)
:排序
asList(Object ... a)
:转为List(后面会讲解List)
copyOf(T [], int newLength)
:从一个数组获取指定长度的元素到新数组,从头开始计长度
copyOfRange(T [], int start, int end)
:获取一个数组范围内的数据,不包含末尾索引
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30};
// 把数组转为字符串
String intStr = Arrays.toString(arr1);
System.out.println(intStr); // [10, 20, 30]
// 数组排序
int[] arr2 = {4, 12, 9};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2)); // [4, 9, 12]
List<String> list1 = Arrays.asList("a", "b", "c", "d");
System.out.println(list1);
int[] arr3 = Arrays.copyOf(arr1,2);
System.out.println(Arrays.toString(arr3));
int[] arr4 = Arrays.copyOfRange(arr1, 1, 3);
System.out.println(Arrays.toString(arr4));
}
}