关于ArrayList特性的问题

nicholas_rock 2005-08-25 10:41:10
import java.util.ArrayList;

public class Test {

static String[] randomSort(ArrayList al) {
String[] sbuf = new String[al.size()];
for(int i = 0; i < sbuf.length; i++) {
sbuf[i] = (String)al.remove((int)(Math.random()*al.size()));
}
return sbuf;
}

public static void main(String[] args) throws Exception {
ArrayList al = new ArrayList();
for(int i = 0; i < 10; i++) {
char c = (char)(i+97);
al.add(String.valueOf(c));
}

String[] sbuf = randomSort(al);

String[] sbuf2 = new String[al.size()];
for(int i = 0; i < sbuf2.length; i++) {
sbuf2[i] = sbuf[i];
System.out.println(sbuf2[i]);
}

for(int i = 0; i < sbuf2.length; i++) {
System.out.println(sbuf2[i]);
}
}
}
给结果
所为什么
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chg2008 2005-08-26
  • 打赏
  • 举报
回复
正确
sinian5802 2005-08-26
  • 打赏
  • 举报
回复
al传入的是引用,而非传值
nicholas_rock 2005-08-26
  • 打赏
  • 举报
回复
sbuf[i] = (String)al.remove((int)(Math.random()*al.size()));这一句已经将al清空了!

=====================================================================================
问题就是为什么清空了?
说好不能打脸 2005-08-26
  • 打赏
  • 举报
回复
可见al传入的是地址,而非引用
说好不能打脸 2005-08-26
  • 打赏
  • 举报
回复
DeBug 报告,
在执行String[] sbuf = randomSort(al);之前,al中的数据为
[a, b, c, d, e, f, g, h, i, j]

在执行了 randomSort(al) 的
for(int i = 0; i < sbuf.length; i++) {
sbuf[i] = (String)al.remove((int)(Math.random()*al.size()));
}
后,al中的数据变成了:[](数据被清空),该方法返回后String[] sbuf中的数据为:[](空),长度为0

dlxu 2005-08-26
  • 打赏
  • 举报
回复
自然是清空了,因为你一个循环,每次从List中删除一个元素,只删不加,自然最后肯定空的
believefym 2005-08-25
  • 打赏
  • 举报
回复
没有结果,你的ArrayList al在randomSort中都remove光了,sbuf2是空的
interhanchi 2005-08-25
  • 打赏
  • 举报
回复
你的就打不出来结果!
sbuf[i] = (String)al.remove((int)(Math.random()*al.size()));这一句已经将al清空了!
String[] sbuf2 = new String[al.size()];这里你定义的就是一个空数组!al.size()=0;
for(int i = 0; i < sbuf2.length; i++) {
sbuf2[i] = sbuf[i];
System.out.println(sbuf2[i]);
}
你这个循环就不会执行,怎么会有结果!
这里改一下就可以了1String[] sbuf2 = new String[al.size()];这一句改为String[] sbuf2 = new String[sbuf.length];

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧