Java中数组的详细介绍
一:数组的概述
数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。使用java数组,必须经过两个步骤,声明数组和分配内存给该数组。数组中的数据类型可以是基本数据类型,也可以是引用数据类型。
1.一维数组
一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。
2.二维数组
如果可以把一维数组当做几何中的一条线图形,那么二维数组就相当于一个表格(有XY轴)。
3.多维数组
如果可以把一维数组当做几何中的一条线图形,二维数组就相当于一个表格,多维数组可以相当于多维空间。java中没有 多维数组,只有数组的数组,即有一个数组中的每一个元素又是一个数组。
二:数组的声明、创建、初始化
1.数组的声明【声明数组时不能指定其长度(数组中元素的个数)】
a.一维数组
int[] IArray 或者 int IArray[] 基本数据类型数组,数组中存放的是基本数据类型。
Teacher[] tArray 或者 Teacher tArray[] 类类型数组,数组中存放的是Teacher类创建的若干个的对象。
b.二维数组
int[][] IArray 或者 int IArray[][]
Teacher[][] tArray 或者 Teacher tArray[][]
c.多维维数组【多维数组不常用,了解就好】
int[]……[] IArray 或者 int IArray[]……[]
Teacher[]……[] tArray 或者 Teacher tArray[]……[]
2.数组的创建【Java中使用关键字new创建数组对象】
格式为:
IArray = new int [5] 一维数组
IArray =new int[5][5] 二维数组
IArray =new int[5]……[5] 多维维数组
注释:二维多维数组的创建方式跟一位创建方式一致
3.数组的初始化
数组的初始化可以分为动态初始化、静态初始化和默认初始化。
a.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
b.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
c.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
A:动态初始化
int a[] ; //声明
a = new int[3] ;//创建
a[0] = 0 ; //初始化
a[1] = 1 ;
a[2] = 2 ;
B:静态初始化
int a[] ; //声明
a = new int[]{0,1,2}; //创建、初始化
C:默认初始化【默认初始化,赋值为该类型的默认值】
int a [] = new int [5] ;
System.out.println("" + a[3]) ; //输出的值为0
二维跟多维的案例,我就不做演示了。
注意:数组的声明、创建、初始化可以一步完成
例如:int a[] =new int[]{0,1,2} //声明、创建、初始化
三:数组的常用方法
1.打印数组中的元素Arrays.toString(数组)int[] intArray = { 1, 2, 3, 4, 5 };
System.out.println(Arrays.toString(intArray));
2.查看数组中是否存在某个值Arrays.asList(数组)将Array转换成List<String>,contains函数来判断元素是否存在
String[] stringArray = { "a", "b", "c", "d", "e" };
boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b);
四:ArrayUtils工具类的常用方法
1.toString:将一个数组转换成String,用于打印数组
String [] stringarr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.toString(stringarr));
打印结果:{爷爷,奶奶,姥姥,姥爷}
2.isEquals:判断两个数组是否相等,采用EqualsBuilder进行判断
String[]stringArr1=new String[]{"爷爷","奶奶","姥姥","姥爷"};
String[]stringArr2=new String[]{"爷爷","奶奶","姥姥","姥爷1"};
System.out.println(ArrayUtils.isEquals(stringArr1, stringArr2));
打印结果:false
3.toMap:将一个数组转换成Map,如果数组里是Entry则其Key与Value就是新Map的Key和Value,如果是Object[]则Object[0]为KeyObject[1]为Value
String [][] stringarr=new String[][]{{"0","爷爷"},{"1","奶奶"},{"2","姥姥"},{"3","姥爷"}};
System.out.println(ArrayUtils.toMap(stringarr).get("0"));
System.out.println(ArrayUtils.toMap(stringarr).get("2"));
打印结果:
爷爷
姥姥
4.clone:拷贝数组
String [] stringarr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.toString(ArrayUtils.clone(stringarr)));
打印结果:{爷爷,奶奶,姥姥,姥爷}
5.subarray:截取子数组
String [] stringarr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.toString(ArrayUtils.subarray(stringarr, 0, 2)));
打印结果:{爷爷,奶奶}
6.isSameLength:判断两个数组长度是否相等
String[]stringArr1=new String[]{"爷爷","奶奶","姥姥","姥爷"};
String[]stringArr2=new String[]{"爷爷","奶奶","姥姥","姥爷1"};
String[]stringArr3=new String[]{"爷爷","奶奶","姥姥"};
System.out.println(ArrayUtils.isSameLength(stringArr1, stringArr2));
System.out.println(ArrayUtils.isSameLength(stringArr1, stringArr3));
打印结果:
true
false
7.getLength:获得数组的长度
String[]stringArr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.getLength(stringArr));
打印结果:4
8.isSameType:判段两个数组的类型是否相同
String[]stringArr1=new String[]{"1","2","3","4"};
String[]stringArr2=new String[]{"1","2","3","4"};
int[]intArr2=new int[]{1,2,3,4};
System.out.println(ArrayUtils.isSameType(stringArr1, stringArr2));
System.out.println(ArrayUtils.isSameType(intArr2, stringArr2));
打印结果:
true
false
9.reverse:数组反转
String[]stringArr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
ArrayUtils.reverse(stringArr);
System.out.println(ArrayUtils.toString(stringArr));
打印结果:{姥爷,姥姥,奶奶,爷爷}
10.indexOf:查询某个Object在数组中的位置,可以指定起始搜索位置,如果没有该值则返回-1
String[]stringArr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.indexOf(stringArr, "爷爷", 0));
System.out.println(ArrayUtils.indexOf(stringArr, "爷", 0));
打印结果:
0
-1
11.lastIndexOf:反向查询某个Object在数组中的位置,可以指定起始搜索位置
String[]stringArr=new String[]{"爷爷","奶奶","姥姥","姥爷"};
System.out.println(ArrayUtils.lastIndexOf(stringArr, "爷爷", 0));
System.out.println(ArrayUtils.lastIndexOf(stringArr, "爷", 0));
打印结果:
0
-1
12.contains:查看数组中是否存在某个值Arrays.asList(数组)将Array转换成List<String>,contains函数来判断元素是否存在
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷" };
boolean b = Arrays.asList(stringArray).contains("爷爷");
System.out.println(b);
打印结果:true
13.toObject:将基本数据类型转换成外包型数据
int[]intArr2=new int[]{1,2,3,4};
System.out.println(ArrayUtils.toString(ArrayUtils.toObject(intArr2)));
打印结果:{1,2,3,4}
14.isEmpty:判断数组是否为空(null和length=0的时候都为空)
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷" };
System.out.println(ArrayUtils.isEmpty(stringArray));
打印结果:false
15.addAll:合并两个数组【数组间类型要一致】
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷" };
String[] stringArray1 = {"1","2","3","4" };
System.out.println(ArrayUtils.toString(ArrayUtils.addAll(stringArray, stringArray1)));
打印结果:{爷爷,奶奶,姥姥,姥爷,1,2,3,4}
16.add:添加一个数据到数组
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷" };
System.out.println(ArrayUtils.toString(ArrayUtils.add(stringArray, "姑姑")));
打印结果:{爷爷,奶奶,姥姥,姥爷,姑姑}
17.remove:删除数组中某个位置上的数据
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷","姥姥" };
System.out.println(ArrayUtils.toString(ArrayUtils.remove(stringArray,2)));
打印结果:{爷爷,奶奶,姥爷}
18.removeElement:删除数组中某个对象(从正序开始搜索,删除第一个)
String[] stringArray = {"爷爷","奶奶","姥姥","姥爷","姥姥" };
System.out.println(ArrayUtils.toString(ArrayUtils.removeElement(stringArray,"姥姥")));
打印结果:{爷爷,奶奶,姥爷,姥姥}