開發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狂 閱讀(1568) 評論(1)  編輯  收藏 所屬分類: 圖形用戶界面

          評論

          # re: 開發JTree時關于HashSet的一點啟發[未登錄] 2007-03-03 12:16 ronghai

          哈哈,這個在java解惑上提示  回復  更多評論   

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

          導航

          統計

          常用鏈接

          留言簿(11)

          隨筆分類(48)

          文章分類(29)

          常去逛逛

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汽车| 翼城县| 永泰县| 乌海市| 台安县| 莆田市| 黄石市| 石首市| 潮安县| 韶山市| 安阳县| 乡宁县| 新闻| 盐亭县| 颍上县| 界首市| 古交市| 南乐县| 西安市| 宁化县| 丹棱县| 和龙市| 冕宁县| 永和县| 金门县| 耒阳市| 盐池县| 晋城| 饶河县| 平舆县| 平原县| 绥宁县| 郸城县| 隆子县| 聂荣县| 盐源县| 德安县| 永吉县| 吴旗县| 犍为县| 东丰县|