求助:SCJP考题一道 - 有关HashSet的remove方法与元素赋值 本帖最后由 kurt17 于 2011-10-16 13:44:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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()); }}我在里面加了2行,代码i2.hashCode();。Set通过hashCode来判断对象是否在在是否被存储,删除也是一样的。http://blog.csdn.net/yakihappy/article/details/3979285 因为i2 = 47时,java的boxing机制使得i2的引用指向了新的Integer对象47,所以hashcode发生了变化,set调用remove方法时比较运算就不会等于Integer对象46的hashcode,所以reomve操作并没有删除set里的46。HashSet的remove方法不是返回boolean值嘛,你可以输出看看。 是的。多谢。就是说:set之前add的i2是new Integer(46)。当i2 = 47后,i2指向的对象变成了new Integer(47),这个对象没有被add到set中过。此时如果让set去remove掉i2,由于new Integer(47)与set完全没有联系,所以remove在set中已经找不到一个i2了。这样貌似不用hashcode也可以解释。 怎样写socket可以连接互联网上的两台电脑 怎样使用已封装好的DES算法实现3DES算法 帮忙看看!! 关于跟踪的问题。高手请帮忙 关于国际化的问题,如何国际化大段的文本? 针对java、jsp初学者的J163网开通,欢迎提建议 请教各位,如何做一个较好的数据库连接池,有资料的,也好。加分,谢谢了!! JBuilder高手救我!! 能不能将ResultSet过滤? 关于java源代码的疑问,谢谢! 关于OutputStream类型的write方法 设置小图标
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());
}
}
我在里面加了2行,代码i2.hashCode();。Set通过hashCode来判断对象是否在在是否被存储,删除也是一样的。
http://blog.csdn.net/yakihappy/article/details/3979285
就是说:set之前add的i2是new Integer(46)。当i2 = 47后,i2指向的对象变成了new Integer(47),这个对象没有被add到set中过。此时如果让set去remove掉i2,由于new Integer(47)与set完全没有联系,所以remove在set中已经找不到一个i2了。
这样貌似不用hashcode也可以解释。