亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2271 | 回復: 2
打印 上一主題 下一主題

求助:一個關于TreeSet的問題,存在困惑! [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-08-06 22:34 |只看該作者 |倒序瀏覽
問題描述:現(xiàn)有一些客戶數(shù)據(jù)要做統(tǒng)計篩選,設計用TreeSet來裝載數(shù)據(jù)。將客戶數(shù)據(jù)放入樹中,對客戶金額排序,當遇到客戶號相同時,插入樹時,將余額相加!代碼如下:
先設計一個節(jié)點類(filenam:TradeNode.java):
import java.util.Comparator;

public class TradeNode implements Comparable<TradeNode> {
    private String cstm; // 客戶號

    private Integer mon = 0; // 交易金額


    public TradeNode(String cstm, int mon) {
        this.mon = mon;
        this.cstm = cstm;
    }

    public int compareTo(TradeNode o) {
        if (o.cstm.equals(this.cstm)) {
            o.mon += this.mon;
            return 0;
        } else if (this.mon == o.mon) {
            return this.cstm.compareTo(o.cstm);
        } else {
            return (o.mon - this.mon);
        }
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub

        return "[" + cstm + "] [" + mon + "]";
    }

    public int getMon() {
        return mon;
    }

    public void setMon(Integer mon) {
        this.mon = mon;
    }

    public String getCstm() {
        return cstm;
    }
}


然后繼承了TreeSet重寫了add函數(shù)(filename:LsTree.java):
import java.util.TreeSet;

public class LsTree extends TreeSet<TradeNode> {
    // 添加子節(jié)點

    public boolean add(TradeNode node) {
        // System.out.println("add node="+node);

        if (contains(node)) {
            return true;
        }
        return super.add(node);
    }
}

測試(filename:testtree2.java:
public class testtree2 {
    public static void main(String[] args) {
        TradeNode nd1 = new TradeNode("44010358010481", 150354);
        TradeNode nd2 = new TradeNode("44010358010481", 150641);
        TradeNode nd3 = new TradeNode("44010358010481", 270000);
        TradeNode nd4 = new TradeNode("44010039275685", 10000);
        TradeNode nd5 = new TradeNode("44010039275685", 980000);
        TradeNode nd6 = new TradeNode("44010039275685", 5000);
        LsTree tree = new LsTree();
        tree.add(nd1);
        tree.add(nd2);
        tree.add(nd3);
        tree.add(nd4);
        tree.add(nd5);
        tree.add(nd6);
        for (TradeNode node : tree) {
            System.out.println(node);
        }
    }

}

得到的結(jié)果:
[44010039275685] [980000]
[44010358010481] [570995]
[44010039275685] [15000]


按我的想法,該樹應該只有兩個節(jié)點,可是輸出卻是3個節(jié)點,左思右想不明白,測試數(shù)據(jù)修改后有時又能得到正確的結(jié)果。剛學習java沒多久,請大家?guī)兔纯矗≈x謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2009-08-07 08:55 |只看該作者

自己解決!

做測試:
public class testtree {
    public static void main(String[] args) {
        TradeNode nd1 = new TradeNode("A", 100);
        TradeNode nd2 = new TradeNode("B", 10);
        TradeNode nd3 = new TradeNode("B", 1000);
        LsTree tree = new LsTree();
        tree.add(nd1);
        tree.add(nd2);
        tree.add(nd3);
        for (TradeNode node : tree) {
            System.out.println(node);
        }
    }
}
樹是二叉樹,當調(diào)用contains方法時,是對余額排序,存在節(jié)點與插入節(jié)點如果分布在樹的兩側(cè),則必然導致,以上結(jié)果。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-08-16 13:56 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP