日期:2014-05-20 浏览次数:20714 次
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值嘛,你可以输出看看。