数组扩容与缩容的实质:就是创建一个新的数组,新数组的长度比原来的数组(大,扩容,小,缩容),然后将原来数组中的内容全部拷贝到新的数组中,最后将新数组重新赋给原来的数组,将新的数组空间进行释放
例:
import java.util.Scanner;
//抓阄游戏,按下回车就开始抽人,进行抓,将抓到的人放到一个新的数组,直到原来的数组变为空数组,游戏结束,抓过的人不能再被抓
public class ZhuaJiu {
public static void main(String[] args) {
String old[]= {"一万","四条","五同","六条","幺鸡","饼子"};
Scanner scanner=new Scanner(System.in);
String newPerson[]=new String[1] ;
System.out.println("按下回车键开始游戏!");
do {
System.out.println("所有玩家列表:");
showName(old);
scanner.nextLine();
int rand=(int) (Math.random()*old.length); //产生数组长度以内的随机数
System.out.println(old[rand]+"被抓到了!");
//将抓到的人放入新的数组,新数组进行扩容
//扩容的实质是构建一个新的长度比原数组长度长的数组,将原来的数组的内容拷贝到新的数组,再将变量重新指向新的数组
//扩容
newPerson[newPerson.length-1]=old[rand];//将抽取到的人放入新建的数组中
String temp[]=new String[newPerson.length+1]; //创建新的数组。新数组的长度比原数组的长度多一
for(int i=0;i<newPerson.length;i++) { //将原数组的内容拷贝到新数组中
temp[i]=newPerson[i];
}
newPerson=temp; //将指向原数组的变量指向新数组,扩容完成
//old的缩容
//缩容的实质是新构建一个数组,将原数组的元素全部拷贝到新的数组,原数组的长度减少,再将指向原数组的变量重新指向新数组
//缩容
for(int i=rand;i<old.length-1;i++) { //将要抓住的人i,其以后的内容全部往前移,再将最后的空的空间删除
old[i]=old[i+1];
}
temp=new String[old.length-1]; //创建长度比原来的数组长度少一的新的数组
for(int i=0;i<old.length-1;i++) {
temp[i]=old[i]; //将原来数组的内容全部拷贝到新数组中
}
old=temp; //指向新数组的变量重新指向原来的数组
temp=null; //将临时创建的数组空间释放
}while(old.length!=0);
}
public static void showName(String[] old) {
for(String name:old) { //增强for循环,将原先定义好的数组的每个变量的值赋给前面新定义的数组
System.out.print(" "+name);
}
}
}