黑马程序员技术交流社区
标题:
集合问题
[打印本页]
作者:
yp324
时间:
2013-6-4 15:21
标题:
集合问题
本帖最后由 yp324 于 2013-6-4 19:53 编辑
public static void main()
{
Collection c = new HashSet();
Demo d1 = new Demo(1,2);
Demo d2 = new Demo(3,4);
Demo d3 = new Demo(5,6);
c.add(d1);
c.add(d2);
c.add(d3);
System.out.println(c.size());
d3.setY(9);
c.remove(d3);
System.out.println(c.size());
}
class Demo
{
int x,y;
Demo(intx,int y)
{
this.x=x;
this.y=y;
}
public void setY(int y)
(
this.y=y;
)
}
为什么两次的打印结果都为3
作者:
Jomes
时间:
2013-6-4 16:08
额 ,你的代码错了吧 。
c.size
?应该是 c.size()吧。
我帮你改了一下 你看看哈
import java.util.Collection;
import java.util.HashSet;
public class Test1 {
public static void main( String[] agrs)
{
Collection c = new HashSet();
Demo d1 = new Demo(1,2);
Demo d2 = new Demo(3,4);
Demo d3 = new Demo(5,6);
c.add(d1);
c.add(d2);
c.add(d3);
System.out.println(c.size());
d3.setY(9);
c.remove(d3);
System.out.println(c.size());
}
}
class Demo
{
int x,y;
Demo(int x,int y)
{
this.x=x;
this.y=y;
}
public void setY(int y)
{
this.y=y;
}
}
复制代码
输出的答案是 3、2
作者:
紫衣侯
时间:
2013-6-4 16:09
hashset添加对象的时候是判断hashcode和比较equals,根据hashcode决定对象的位置,equals看是否重复。 删除的时候也要判断这两项。删除一个对象时,先要判断hashcode找到对象的位置,再比较equals。 应该是 因为更改了值value ,所以删除没有成功。
作者:
hou604720966
时间:
2013-6-4 16:55
因为hashset添加、删除对象的时候是通过hashcode来判断哈希码值和equals比较的,而你把d3的值修改过后,d3的值发生了改变所以删除不成功
作者:
luckwei
时间:
2013-6-4 16:59
你的打印调用的应该是size()方法。
作者:
郭天龚
时间:
2013-6-4 19:28
你好你的这段代码我验证了一下是可以删除d3这个对象的,为什么呢?刚开始我也纳闷,其实你细看一下就会发现
你的Demo类没有复写继承自Object类中的equals方法,这样不管你怎么修改d1,d2,d3都是可以删除。
import java.util.*;
class DemoTest
{
public static void main(String[] args)
{
Collection c = new HashSet();
Demo d1 = new Demo(1,2);
Demo d2 = new Demo(3,4);
Demo d3 = new Demo(5,6);
c.add(d1);
c.add(d2);
c.add(d3);
System.out.println(c.size());
d3.setY(9);
c.remove(d3);
//System.out.println(c.remove(d3));
System.out.println(c.size());
}
}
class Demo
{
int x,y;
Demo(int x,int y)
{
this.x=x;
this.y=y;
}
public void setY(int y)
{
this.y=y;
}
}
运行结果是
3
true
2
我打印了一下remove函数的返回结果,是true说明remove方法成删除了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2