一個ArrayList對象,比如叫 al,
儅我在 al 中 add 進去1000個Object后,
al.size() = 1000
這個很好理解。
但是儅我把 al 中的Object 全部 remove 之後,
al.size() = 500 了。
就是 remove 操作以後,al 的 size 變小為原來的一半了。
看了一下 ArrayList 的remove 操作的源碼,未發現有對容量操作的痕跡。
懇請執教。
儅我在 al 中 add 進去1000個Object后,
al.size() = 1000
這個很好理解。
但是儅我把 al 中的Object 全部 remove 之後,
al.size() = 500 了。
就是 remove 操作以後,al 的 size 變小為原來的一半了。
看了一下 ArrayList 的remove 操作的源碼,未發現有對容量操作的痕跡。
懇請執教。
解决方案 »
- Eclipse 3.2 的Swing插件在哪下载?
- 如何让socket客户端实时接收到server发来的数据?
- 在windows下设的那个环境变量和在Dos窗口里用-classpath以及set classpath这三个环境变量会相互替换么?
- 18岁的烦恼
- 基础题目: Reader and Writer为什么要用int类型来存取读写的char类型?
- 自己的计算器程序实在做不下去了,大虾们进来看看
- 百分求救,如何建立一个目录(在线)
- 安装Jbuilder8.0??????
- 往oracle的日期型字段中插入一条记录
- 用java编译成.class出德问题,请指点下:
- 编码问题,大家讨论一下
- 一个菜鸟关于String的问题!!!
public class Test{
public static void main(String[] args){
ArrayList al = new ArrayList();
for(int i = 0;i < 100;i++) {
al.add(new Integer(i));
}
System.out.println(al.size());
for(int i = 0;i < al.size();i++) {
al.remove(al.get(i));
}
System.out.println(al.size());
}
}
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
for (int i=0 ;i < 10 ;i++ )
{
al.add(new Integer(i));
}
System.out.println(al.size()); int size = al.size();
for (int j = 0 ;j < al.size() ;j++ )
{
for (int k = 0 ; k < al.size(); k++)
{
System.out.println(al.get(k));
}
System.out.println("==================="); al.remove(j); }
System.out.println(al.size());
}
}remove的时候,ArrayList 的大小变化,而index却没有变,所以没有删掉。
也就是说删的是别的元素。
可以从后往前删
int size = al.size();
for (int j = 0 ;j < al.size() ;j++ )
{
al.remove(j); // 删除以后看看ArrayList的元素,最后可以看到没有删的元素。
for (int k = 0 ; k < al.size(); k++)
{
System.out.println(al.get(k));
}
System.out.println("==================="); }
for( int i=al.size()-1; i>=0; i-- )
{}因为你 remove 掉某一个以后,后边的元素就往前顶上,然后你下标又往后移了一个,因此有一半的元素没有 remove 掉。