有了这一句时 list.size()有时会为4 
不应该的啊,上面只添加进去了三个元素
楼主把有时会为4,有时的那种情况多验证下,应该不会为4的

解决方案 »

  1.   

    把list1和list2的声明给放到循环外,然后在main方法的最后打印一下看看呢
      

  2.   

    刚跑了几次,还专程把 System.out.println("list1.size()" + list1.size());打印了,为了看这清晰
    跑了有8次左右,都是3,真没出现4
    再说了,每次List list1=new ArrayList(); 时,list1 都指向了一个空的集合然后 到打印list1.size() 之前,都只添加了三个元素进去或许我还有考虑不周的地方吧,请楼主将为4的情况截出来看看 
      

  3.   

    刚跑了几次,还专程把 System.out.println("list1.size()" + list1.size());打印了,为了看这清晰
    跑了有8次左右,都是3,真没出现4
    再说了,每次List list1=new ArrayList(); 时,list1 都指向了一个空的集合然后 到打印list1.size() 之前,都只添加了三个元素进去或许我还有考虑不周的地方吧,请楼主将为4的情况截出来看看 
    package testcollection;import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;public class TestList {
    public static void main(String[] args) {
    int count=0;
    int count2=0;
    for(int i=1;i<=100;i++){
    List list1=new ArrayList();
    list1.add(134983);
    list1.add("fdjakadf");
    list1.add(new Date());
    System.out.println(list1.size());//第一次输出
    list1.remove(new Date());
    List list2=new ArrayList();
    list2.add("djfdj");
    list2.add("dfjh");
    list2.add(342234);
    list2.add(new Date());
    list2.add("dsfak");
    list2.add(new Dog());


    list1.add(list2);
    System.out.println(list1.size());//第二次输出
    if(list1.size()==3){
    count++;
    }
    if(list1.size()==4){
    count2++;
    }


    }
    System.out.println(count);
    System.out.println(count2);
    }
    }
    class Dog{

    }
    我又加了个输出语句 按说第一次 第二次 都是3 没有4但是....、
    最后count 和count2 的 次数
      

  4.   

    List list1=new ArrayList();
    list1.add(134983);
    list1.add("fdjakadf");
    list1.add(new Date()); // 添加了new Date
    System.out.println(list1.size());//第一次输出
    list1.remove(new Date());  // 移除了new Date
    list1.add(list2); // 再添加list2 
    这里的new Date() 是对象,在内存空间中
    我测了很多次,都是3,没有出现4
    其实问题就出在new Date 上,为4的时候,remove的new Date 不是add 的那个new Date 
    所以,remove 根本就没有删除掉任何东西,所以此时list1的size 依然是3,再添加list2 就是4了
    还为3的情况,remove掉的是add的那个new Date,导致list1的size为2
    再添加list2 为3Date 类的equals 方法,比较的是getTime()的值
    public boolean equals(Object obj) {
            return obj instanceof Date && getTime() == ((Date) obj).getTime();
     }
    瞬时的两个new Date ,java会认为他们是相同的对象给list1.remove(new Date());  前添加一行 Thread.sleep(100);
    这时,remove里面的对象便不再是之前add的对象,这样每次的list1.size 都是4了
      

  5.   

    刚跑了几次,还专程把 System.out.println("list1.size()" + list1.size());打印了,为了看这清晰
    跑了有8次左右,都是3,真没出现4
    再说了,每次List list1=new ArrayList(); 时,list1 都指向了一个空的集合然后 到打印list1.size() 之前,都只添加了三个元素进去或许我还有考虑不周的地方吧,请楼主将为4的情况截出来看看 
    package testcollection;import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;public class TestList {
    public static void main(String[] args) {
    int count=0;
    int count2=0;
    for(int i=1;i<=100;i++){
    List list1=new ArrayList();
    list1.add(134983);
    list1.add("fdjakadf");
    list1.add(new Date());
    System.out.println(list1.size());//第一次输出
    list1.remove(new Date());
    List list2=new ArrayList();
    list2.add("djfdj");
    list2.add("dfjh");
    list2.add(342234);
    list2.add(new Date());
    list2.add("dsfak");
    list2.add(new Dog());


    list1.add(list2);
    System.out.println(list1.size());//第二次输出
    if(list1.size()==3){
    count++;
    }
    if(list1.size()==4){
    count2++;
    }


    }
    System.out.println(count);
    System.out.println(count2);
    }
    }
    class Dog{

    }
    我又加了个输出语句 按说第一次 第二次 都是3 没有4但是....、
    最后count 和count2 的 次数
    懂了 O(∩_∩)O谢谢