日期:2014-05-20 浏览次数:20846 次
QUESTION 75
Given:
3. import java.util.*;
4. public class Mapit {
5. public static void main(String[] args) {
6. Set<Integer> set = new HashSet<Integer>();
7. Integer i1 = 45;
8. Integer i2 = 46;
9. set.add(i1);
10. set.add(i1);
11. set.add(i2); System.out.print(set.size() + " ");
12. set.remove(i1); System.out.print(set.size() + " ");
13. i2 = 47;
14. set.remove(i2); System.out.print(set.size() + " ");
15. }
16. }
public class Mapit {
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
Integer i1 = 45;
Integer i2 = 46;
System.out.println(i2.hashCode());
set.add(i1);
set.add(i1);
set.add(i2);
System.out.print(set.size() + " ");
set.remove(i1);
System.out.print(set.size() + " ");
i2 = 47;
set.remove(i2);
System.out.print(set.size() + " ");
System.out.println(i2.hashCode());
}
}
------解决方案--------------------
因为i2 = 47时,java的boxing机制使得i2的引用指向了新的Integer对象47,所以hashcode发生了变化,set调用remove方法时比较运算就不会等于Integer对象46的hashcode,所以reomve操作并没有删除set里的46。HashSet的remove方法不是返回boolean值嘛,你可以输出看看。