关于list.size()的有关问题

关于list.size()的问题
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.size()一直是3 有了这一句时 list.size()有时会为4
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);

if(list1.size()==3){
count++;
}
if(list1.size()==4){
count2++;
}


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

}

输出结果:
3
3
3
92
8
------解决方案--------------------
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 为3

Date 类的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了