arraycopy方法:
int[] src = {0,1,2,3,4,5,6,7,8,9};
int[] dest = {0,0,0,0,0,0,0,0,0,0};
System.arraycopy(src,0,dest,0,9);
从下标为0的位置开始复制,复制到dest数组中的0-9位置。
数组动态“扩容”
数组对象/长度不能改变,这里的动态扩容/缩容是通过复制更换新数组实现的!
Java中没有真正的扩容。JavaAPI底层都是采用这个策略进行“扩容”
int[] arr = {1,2,3,5,4,7};
arr = Arrays.copyOf(arr,arr.length+1);
for (int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
吃方法,吃掉后进行缩容处理
public void eating(){
//大球和小球
Ball[] big = balls;
Ball[] small = balls;
boolean[] eaten = new boolean[small.length]; //创建了吃掉标志,默认都是false,表示没吃掉。boolean默认false
int n = 0; //记录有几个球被吃掉了
for (int i = 0;i<big.length;i++){ //每一个大球
//如果大球已经被吃掉了,就忽略
if(eaten[i]){
continue;
}
for (int j=0;j<small.length;j++){ //每一个小球
//球不能吃自己
if(big[i]==small[j]){
continue;
}
//如果小球被吃掉就忽略
if(eaten[j]){
continue;
}
if(big[i].eaten(small[j])){
System.out.println("吃...");
System.out.println(big[i].x+ ","+big[i].y+ ","+big[i].d);
System.out.println(small[j].x+ ","+small[j].y+ ","+small[j].d);
//把小球的位置设置为true
eaten[j] = true;
n++;
}
}
}
System.out.println(Arrays.toString(eaten));
System.out.println(n);
if(n==0){ //什么都没吃掉
return;
}
//缩容处理
Ball[] arr = new Ball[small.length]; //此时为新数组,但都为空
int index = 0;
for (int i =0;i<small.length; i++){
if (!eaten[i]){ //如果index不为true
arr[index++] = small[i]; //就放入arr中,不为true的元素都放进了数组,后面的部分为0
// index++;
}
}
System.out.println(Arrays.toString(arr));
balls = Arrays.copyOf(arr,arr.length-n); //缩容处理,并替换原数组
}