開發(fā)JTree時(shí)關(guān)于HashSet的一點(diǎn)啟發(fā)

          大家都知道Set的實(shí)現(xiàn)類HashSet中只能存放不重復(fù)的元素,但是它也是可以添加重復(fù)元素的,只不過(guò)是相同的元素被覆蓋了而已,如下面的代碼:

          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());
            }
          可是輸出卻和我想的大相徑庭。(我認(rèn)為只輸出 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());
           }
           
          }

          經(jīng)過(guò)我的修改,終于實(shí)現(xiàn)了HashSet應(yīng)該發(fā)揮的功能,呵呵。



          posted on 2007-03-03 11:16 我為J狂 閱讀(1571) 評(píng)論(1)  編輯  收藏 所屬分類: 圖形用戶界面

          評(píng)論

          # re: 開發(fā)JTree時(shí)關(guān)于HashSet的一點(diǎn)啟發(fā)[未登錄] 2007-03-03 12:16 ronghai

          哈哈,這個(gè)在java解惑上提示  回復(fù)  更多評(píng)論   

          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(11)

          隨筆分類(48)

          文章分類(29)

          常去逛逛

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 嘉黎县| 阿尔山市| 丰县| 阿拉善右旗| 巢湖市| 河曲县| 陇川县| 颍上县| 隆子县| 岳普湖县| 静安区| 会昌县| 修水县| 南陵县| 浦城县| 永新县| 东乌珠穆沁旗| 醴陵市| 石首市| 永春县| 南京市| 应用必备| 积石山| 嘉黎县| 南平市| 西藏| 新丰县| 临城县| 武定县| 宁都县| 贡嘎县| 长子县| 田阳县| 宜川县| 建德市| 淮南市| 丹江口市| 安塞县| 沙雅县| 博野县| 城市|