数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。
在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
数组的基本使用
public class TestArry {
public static void main(String[] args) {
//创建一个数组
int[] arry1 = new int[3];
//获取数组长度
int length1 = arry1.length;
System.out.println("arry1的长度: "+length1);
//访问数组中的元素:数组名[下标] 注意:下标从0开始,最大取到长度减一
int element0 = arry1[0];
System.out.println("第0个元素:"+element0);
//为数组中的元素赋值
arry1[0]= 99;
System.out.println("第0个元素:"+arry1[0]);
arry1[1]=98;
arry1[2]=97;
//遍历数组
for(int i=0; i<length1 ;i++) {
System.out.println("arry1 中的第"+i+"个元素为"+arry1[i]);
}
//创建数组的同时给数组赋值
int[] arry2 = new int[] {4,5,8,2,3};
//获取数组长度
int length2 = arry2.length;
System.out.println("arry2的长度':"+length2);
}
}
运行结果:
arry1的长度: 3
第0个元素:0
第0个元素:99
arry1 中的第0个元素为99
arry1 中的第1个元素为98
arry1 中的第2个元素为97
arry2的长度':5
插入一个新的元素到数组的最后
import java.util.Arrays;
public class TsetOpArry {
public static void main(String[] args) {
//解决数组的长度不可变问题
int[] arry = new int [] {9 , 8 ,7};
//快速查看数组中的元素
System.out.println(Arrays.toString(arry));
//要加入的元素
int dst = 6 ;
//创建一个新数组,长度是原数组长度+1
int[] NewArry = new int [arry.length+1];
//把原数组的数据全部复制到新数组的中
for(int i=0 ;i<arry.length; i++) {
NewArry[i]=arry[i];
}
//把目标元素放在新数组的最后
NewArry[arry.length] = dst;
//新数组替换原数组
arry = NewArry;
System.out.println(Arrays.toString(arry));
}
}
运行结果:
[9, 8, 7]
[9, 8, 7, 6]
删除数组中指定位置的元素
import java.util.Arrays;
public class TestOpArry2 {
//如何删除数组中的元素
public static void main(String[] args) {
//创建一个数组
int[] array2 = new int [] {9,8,7,6,5,4};
System.out.println(Arrays.toString(array2));
//要删除元素的下标
int dst = 3;
//创建一个新的数组,长度是原来长度减一
int [] Newarray2 = new int [array2.length-1];
//赋值原数组中除了要删除元素以外的其他数组
for(int i=0;i<Newarray2.length;i++) {
//要删除的元素之前的元素
if(i<dst) {
Newarray2[i]= array2[i];
}else {
Newarray2[i] = array2[i+1];
}
}
//新数组替换原数组
array2 = Newarray2;
System.out.println(Arrays.toString(array2));
}
}
运行结果:
[9, 8, 7, 6, 5, 4]
[9, 8, 7, 5, 4]
使用面向对象的方法实现上述:
package demo1.util;
import java.util.Arrays;
public class MyArray {
//用于存储数据的数组
private int[] elements;
public MyArray() {
elements = new int[0];
}
//获取数组长度的方法
public int size() {
return elements.length;
}
//往数组的末尾添加一个元素
public void add(int element) {
//创建一个新的
int[] newarry = new int[elements.length+1];
//把原数组中的元素复制到新数组中
for(int i=0;i<elements.length;i++) {
newarry[i] = elements[i];
}
//把添加的元素放在新的数组中
newarry[elements.length] = element;
//使用新数组替换旧数组
elements = newarry;
}
//打印所有元素
public void show() {
System.out.println(Arrays.toString(elements));
}
//删除数组中的元素
public void delete(int index) {
//判断是否下标越界
if(index<0 ||index>elements.length-1) {
throw new RuntimeException("下标越界");
}
//创建一个新的数组,长度为原数组长度减一
int [] newarry = new int[elements.length-1];
for(int i=0;i<newarry.length;i++) {
//要删除的元素之前的元素
if(i<index) {
newarry[i]= elements[i];
}else { //要删除元素之后元素
newarry[i] = elements[i+1];
}
}
//替换
elements = newarry;
}
//获取某个元素
public int get(int index) {
return elements[index];
}
//插入一个元素到指定位置
public void insert(int index , int element) {
//创建一个新的数组
int[] newarray = new int[elements.length+1];
//将原数组的元素放到新的数组中
for(int i=0;i<newarray.length-1;i++) {
if(i<index) {
newarray[i]=elements[i];
}else {
newarray[i+1]=elements[i];
}
}
newarray[index]=element;
//新数组替换旧数组
elements=newarray;
}
}
import demo1.util.MyArray;
public class TestMyArray {
public static void main(String[] args) {
//创建一个可变的数组
MyArray ma = new MyArray();
//获取长度
int size = ma.size();
ma.show();
//往可变数组中添加一个元素
ma.add(99);
ma.add(98);
ma.add(97);
ma.add(96);
ma.add(95);
ma.add(94);
//显示元素
ma.show();
//删除某个元素
ma.delete(1);
ma.show();
//取出指定位置的元素
System.out.println(ma.get(1));
System.out.println("====================");
ma.insert(2, 90);
ma.show();
}
}
运行结果:
[]
[99, 98, 97, 96, 95, 94]
[99, 97, 96, 95, 94]
97
====================
[99, 97, 90, 96, 95, 94]
数组的拷贝
System类里也包含了一个static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。
public class Test {
public static void main(String args[]) {
String[] s = {"aa","bb","bb","dd","ee"};
String[] sBak = new String[7];
System.arraycopy(s,0,sBak,1,s.length);
for (int i = 0; i < sBak.length; i++) {
System.out.print(sBak[i]+ "\t");
}
}
}
输出为:
null aa bb cc dd ee null