数组是用来存储固定大小的同类型元素。
- Java 数组的声明、创建和初始化
声明数组:首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar; // 首选的方法 或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
创建数组
arrayRefVar = new dataType[arraySize];
声明创建
dataType[] arrayRefVar = new dataType[arraySize];
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。
初始化:可分为静态初始化和动态初始化
1)静态初始化的简单写法
int[] arr2 = {1,2,3,4,5};//声明、创建、初始化
2)动态初始化
int[] arr1 = new int[5]; //声明、创建
arr1[0] = 0;//初始化
arr1[0] = 1;
arr1[0] = 2;
arr1[0] = 3;
arr1[0] = 4;
2.引用对象的内存分析
public class Test1 {
public static void main(String[] args) {
int[] x = null;
x = new int[3];
x[0] = 10;
x[1] = 20;
x[2] = 30;
x = null;
}
}
3.处理数组
(1)调用
数组的访问通过索引完成,即:“数组名称[索引]”,如arr2 [2], 但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息;
(2)遍历
第一种
int data[] = new int[3]; /*开辟了一个长度为3的数组*/
data[0] = 10; // 第一个元素
data[1] = 20; // 第二个元素
data[2] = 30; // 第三个元素
for(int x = 0; x < data.length; x++) {
System.out.println(data[x]); //通过循环控制索引
}
第二种for-each(增强for)
int [] array = {1,2,3};
for(int i : array){
System.out.println(i);
}
(3)排序
java.util.Arrays.sort(arrayName) ;
import java.util.Arrays;
public class ArrayUtil {
public static void main(String[] args) {
int[] a = new int[]{1, 33, 5, 44, 76};//1,5,33,44,76
System.out.println("排序之前:");
arrayPrint(a);//1,5,33,44,76
Arrays.sort(a);
System.out.println("排序之后:");
//改变原数组
arrayPrint(a);//1,5,33,44,76
}
public static void arrayPrint(int[] c) {
if (c == null) {
return;
}
for (int j = 0; j < c.length; j++) {
System.out.print(c[j] + " ");
}
System.out.println();
}
}
(4)拷贝
将指定源数组中的数组从指定位置复制到目标数组的指定位置。j
ava.lang.System.arraycopy(Object src,int srcPos,Object dest, int destPos,int length);
public class ArrayUtil {
//拷贝
public static void main(String[] args) {
int[] src = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
int[] dest = new int[3];
arrayPrint(src);//1,2,3,4,5,6,7,8
arrayPrint(dest);0,0,0
//方法一
// for(int i=2;i<5;i++){
// dest[i-2]=src[i];
// }
//方法二
System.arraycopy(src, 2, dest, 0, 3);
arrayPrint(src);//1,2,3,4,5,6,7,8
arrayPrint(dest);3,4,5
}
public static void arrayPrint(int[] c) {
if (c == null) {
return;
}
for (int j = 0; j < c.length; j++) {
System.out.print(c[j] + " ");
}
System.out.println();
}
}
方法二:复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。
java.util.Arrays.copyOf(源数组名称,新数组长度)
import java.util.Arrays;
public class ArrayUtil {
public static void main(String[] args) {
int[] src = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
arrayPrint(src);//1,2,3,4,5,6,7,8
int[] dest1 = Arrays.copyOf(src, 7);
//Arrays.copyOf不改变原数组
arrayPrint(src);//1,2,3,4,5,6,7,8
arrayPrint(dest1);//1,2,3,4,5,6,7,
int[] dest2 = Arrays.copyOf(src, 10);
arrayPrint(dest2);//1,2,3,4,5,6,7,8,0,0
}
public static void arrayPrint(int[] c) {
if (c == null) {
return;
}
for (int j = 0; j < c.length; j++) {
System.out.print(c[j] + " ");
}
System.out.println();
}
}
(5)数组转集合
java.util.Arrays.asList(arg);
String[] array = new String[] {"zhu", "wen", "tao"};
// String数组转List集合
List<String> mlist = Arrays.asList(array);
// 输出List集合
for (int i = 0; i < mlist.size(); i++) {
System.out.println("mlist-->" + mlist.get(i));
}
注意:数组int[]用Integer[],double[]用Double[] ,因为List集合是对象的集合,而int、double等不是对象,所以需要用字段的对应对象类
可以使用apache commons-lang3 jar
org.apache.commons.lang3.ArrayUtils.toObject(int[]) 方法 先转成Integer数组
再使用 java.util.Arrays.asList(Integer...) 转成list
public static void main(String[] args){
int[] src = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Integer[] is = ArrayUtils.toObject(src);
List<Integer> asList = Arrays.asList(is);
System.out.println(asList);
}