开发JTree时关于HashSet的一点启发

大家都知道Set的实现类HashSet中只能存放不重复的元素,但是它也是可以添加重复元素的,只不过是相同的元素被覆盖了而已,如下面的代码:

Set<String> set=new HashSet<String>();
  set.add("a");
  set.add("b");
  set.add("c");
  set.add("a");
  set.add("b");
    for (String s : set)
  {
   System.out.println(s);
  }

输出为:
                b
                c
                a

于是我天真的写下了下面的代码
Set<DefaultMutableTreeNode> nodes=new HashSet<DefaultMutableTreeNode>();
  DefaultMutableTreeNode node1=new DefaultMutableTreeNode("a");
  DefaultMutableTreeNode node2=new DefaultMutableTreeNode("b");
  DefaultMutableTreeNode node3=new DefaultMutableTreeNode("b");
  DefaultMutableTreeNode node4=new DefaultMutableTreeNode("a");
  nodes.add(node1);
  nodes.add(node2);
  nodes.add(node3);
  nodes.add(node4);
  for (DefaultMutableTreeNode node : nodes)
  {
   System.out.println(node.getUserObject());
  }
可是输出却和我想的大相径庭。(我认为只输出 a b)
输出:
            b
            a
            b
            a

于是我深入研究了一下HashSet中的add方法的源代码,恍然大悟。将以上程序更改如下:

Set<MyTreeNode > nodes=new HashSet<MyTreeNode>();
  MyTreeNode node1=new MyTreeNode("a"); 
  MyTreeNode node2=new MyTreeNode("b"); 
  MyTreeNode node3=new MyTreeNode("b"); 
  MyTreeNode node4=new MyTreeNode("a");
  nodes.add(node1);
  nodes.add(node2);
  nodes.add(node3);
  nodes.add(node4);
  for (DefaultMutableTreeNode node : nodes)
  {
   System.out.println(node.getUserObject());
  }

其中MyTreeNode 是我自定义的类。

class MyTreeNode extends DefaultMutableTreeNode
{
 MyTreeNode(Object obj)
 {
  super(obj);
 }

 @Override
 public int hashCode()
 {
  // TODO Auto-generated method stub
  return this.getUserObject().hashCode();
 }
 @Override
 public boolean equals(Object obj)
 {
  // TODO Auto-generated method stub
  MyTreeNode treeNode=(MyTreeNode)obj;
  return this.getUserObject().equals(treeNode.getUserObject());
 }
 
}

经过我的修改,终于实现了HashSet应该发挥的功能,呵呵。



posted on 2007-03-03 11:16 我为J狂 阅读(1557) 评论(1)  编辑  收藏 所属分类: 图形用户界面

评论

# re: 开发JTree时关于HashSet的一点启发[未登录] 2007-03-03 12:16 ronghai

哈哈,这个在java解惑上提示  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜