数组是相同类型数据的有序结合。数组描述的是相同类型的若干类型,按照一定的先后顺序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问他其元素。
数组的三个基本特点:
1.长度确定,一旦被创建,大小不可改变。
2.其元素必须是相同类型,不允许出现混合类型。
3.数组类型可以是任何类型,包括基本类型和引用类型。
数组变量属于引用类型,数组也是对象,数组中的每个元素相当于对象的成员变量。
若声明了一个长度为10的int类型的数组,内存动态如下:
public class TestArray { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr01=new int[10]; //创建一个长度为10(length)的int类型的数组,索引下标0~9 String arr02[]=null; //数组的声明方式 /*逐赋值法*/ arr01[0]=13; arr01[1]=16; arr01[2]=18;*/ //arr01[12]=19; //若超越索引下标,编译正确,运行会报错,数组越界ArrayIndexOutOfBoundsException:12 /*循环初始化数组并读取元素值*/ for(int i=0;i<arr01.length;i++){ arr01[i]=10+i; System.out.println(arr01[i]); } User2[] arr03=new User2[3]; arr03[0]=new User2(1706,"aa"); arr03[1]=new User2(1707,"ab"); arr03[2]=new User2(1708,"ac"); for(int i=0;i<arr03.length;i++){ System.out.println(arr03[i].getName()); } } } class User2{ private int id; private String name; /*构造方法*/ public User2(int id, String name) { super(); this.id = id; this.name = name; } /*写get、set方法*/ public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
数组的初始化方式有3种:静态初始化、动态初始化、默认初始化
foreach循环:用于读取数组元素的值,不能修改元素的值
数组的复制、删除及扩容
public class TestArrayCopy { public static void main(String[] args) { // TODO Auto-generated method stub testBasicCopy2(); String s1[]={"aa","bb","cc","dd","ee"}; String s2[]=new String[10]; String str[]={"阿里","腾讯","美团","百度","BAT","去哪儿"}; removeElement(str,2); extendRange(s1); System.arraycopy(s1, 2, s2, 6, 3);//将s1数组从第2个位置开始拷到s2的第6个位置 /*Object src, int srcPos, Object dest, int destPos, int length) 从SRC数组拷贝到dest数组;srcPos数组开始拷贝的位置.destPos目标数组位置;length代表长度 */ for(int i=0;i<s2.length;i++){ System.out.println(i+":"+s2[i]); } } //测试从数组中删除某个元素cc(本质上还是数组的拷贝) public static void testBasicCopy2(){ String s1[]={"aa","bb","cc","dd","ee"}; //String s2[]=new String[5]; System.arraycopy(s1, 3, s1, 3-1, 2); s1[s1.length-1]=null; for(int i=0;i<s1.length;i++){ System.out.println(i+":"+s1[i]); } } //删除数组中指定索引位置的元素,并将原数组返回 public static String[] removeElement(String s[],int index){ System.arraycopy(s, index+1, s, index, s.length-index-1); s[s.length-1]=null; for(int i=0;i<s.length;i++){ System.out.println(i+":"+s[i]); } return s; } //数组的扩容(本质上是先定义一个更大的数组,然后将原数组内容原封不动地拷贝到新数组) public static String[] extendRange(String[] s1){ String ss2[]=new String[s1.length+3]; System.arraycopy(s1, 0, ss2, 0, s1.length); for(String j:ss2){ System.out.println(j); } return ss2; } }
数组复制的参数解释:
Array类:JDK提供的java.util.Arrays类,包含了常用的数组操作,方便我们日常开发。包含了:排序、查找、填充、打印等操作。
打印:
排序:
查找:
多维数组:可以看成以数组为元素的数组,经常使用二维数组,学习容器后,一般使用容器,二维数组用的很少。