关于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了
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了