<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 39,  comments - 263,  trackbacks - 0
      2006年5月27日
        這幾天用TimerTask作了個框架,擔(dān)心超過十萬條數(shù)據(jù)的時候速度變慢,其實每秒十萬次的運行速度等到以后放在服務(wù)器上運行應(yīng)該游刃有余吧,還不清楚,不過現(xiàn)在在我筆記本上運行得還可以,內(nèi)存吃的很大,java就這毛病,程序員不能自由釋放內(nèi)存。1G內(nèi)存不夠用,我筆記本2G有分配不了,似乎虛擬內(nèi)存java用不了,沒仔細做過實驗。
        這幾天看新聞知道番茄花園作者被警方逮捕,樹大招風(fēng),槍打出頭鳥,很正常,從程序員的身份來講,盜版是要打擊的,不過我本身電腦里要付費的軟件都是盜版的,很矛盾,呵呵。
    posted @ 2008-08-21 23:54 nake 閱讀(2150) | 評論 (3)編輯 收藏
    實在太久沒寫servlet了,應(yīng)該至少1年了,那時候做了點皮毛,現(xiàn)在項目要求用到servlet的相關(guān)知識,同時我在blogjava的bolg又開張了。學(xué)習(xí)的過程將記錄在我的blog中。對比了一下netbean和eclipse感覺用netbean編寫servlet程序方便些,eclipse用了幾年,但是還是感覺每次要找好相關(guān)的jar需要花費太多時間,于是決定用netbean編寫了。
    posted @ 2008-07-12 15:15 nake 閱讀(1945) | 評論 (2)編輯 收藏
    看看以下代碼:
    將26個英文字母重復(fù)加了5000次,

    String tempstr = "abcdefghijklmnopqrstuvwxyz";
    int times = 5000;
    long lstart1=System.currentTimeMillis();
    ??String str ="";
    ??for(int i=0;i<times;i++)
    ??{
    ???str+=tempstr;
    ??}
    ??
    ??long lend1=System.currentTimeMillis();
    ??long time = (lend1-lstart1);
    ??System.out.println(time);

    可惜我的計算機不是超級計算機,得到的結(jié)果每次不一定一樣一般為 154735 左右。
    也就是154秒。
    我們再看看以下代碼

    String tempstr = "abcdefghijklmnopqrstuvwxyz";
    ?
    ??int times = 5000;
    long lstart2=System.currentTimeMillis();
    ??StringBuffer sb =new? StringBuffer();
    ??for(int i=0;i<times;i++)
    ??{
    ???sb.append(tempstr);
    ???
    ??}
    ??long lend2=System.currentTimeMillis();
    ??long time2 = (lend2-lstart2);
    ??System.out.println(time2);
    ?得到的結(jié)果為 16 有時還是 0
    所以結(jié)論很明顯,StringBuffer 的速度幾乎是String 上萬倍。當(dāng)然這個數(shù)據(jù)不是很準(zhǔn)確。因為循環(huán)的次數(shù)在100000次的時候,差異更大。不信你試試。
    下一次我將解釋為什么StringBuffer 的效率比String 高這么多。
    posted @ 2007-01-14 12:24 nake 閱讀(4220) | 評論 (4)編輯 收藏

    swt 簡單的托盤程序
    java寫和操作系統(tǒng)相關(guān)的程序難度非常大。在java 6出現(xiàn)之前,如果你想實現(xiàn)一個托盤程序,最簡單的就是用swt了。
    通過google我找到了一段代碼。
    其實很簡單。主要的代碼如下:
    ?????????????final Tray tray = display.getSystemTray();
    ??????????? final TrayItem trayItem = new TrayItem(tray, SWT.NONE);
    ??????????? Image image = new Image (display, 16, 16);
    ??????????? trayItem.setImage(image);
    知道了重點,事情變的很簡單了。看看所有程序
    //-----------------
    public class SystemTray extends Shell {
    ??? public static void main(String args[]) {
    ??????? try {
    ??????????? Display display = Display.getDefault();
    ??????????? SystemTray shell = new SystemTray(display, SWT.SHELL_TRIM);
    ?????????? // shell.createSystemTray(shell);
    ??????????? final Tray tray = display.getSystemTray();
    ??????????? final TrayItem trayItem = new TrayItem(tray, SWT.NONE);
    ??????????? Image image = new Image (display, 16, 16);
    ??????????? trayItem.setImage(image);
    ??????????? shell.open();
    ??????????? shell.layout();
    ??????????? while (!shell.isDisposed()) {
    ??????????????? if (!display.readAndDispatch())
    ??????????????????? display.sleep();
    ??????????? }
    ??????? } catch (Exception e) {
    ??????????? e.printStackTrace();
    ??????? }
    ??? }
    ??? public SystemTray(Display display, int style) {
    ??????? super(display, style);
    ??????? createContents();
    ??? }

    ??? /**
    ???? * Create contents of the window
    ???? */
    ??? protected void createContents() {
    ??????? setText("SWT Application");
    ??????? setSize(500, 375);

    ??? }
    ??? //swt 默認(rèn)情況下不允許shell被繼承
    ??? //所以我重載了父類的方法
    ??? protected void checkSubclass() {
    ???????? }
    }
    //--------------------
    如果你想成功運行以上代碼,你最好在eclipse下新建一個swt的類。具體操作你搜索一下吧。
    但是上面的代碼只是加入了托盤,這可能是最簡單的實現(xiàn)托盤的程序了。我們加入事件處理,讓程序能夠最大和最小化。然后把托盤用圖片來表示。
    詳細的代碼不參考
    下載 到eclipse里運行

    posted @ 2007-01-03 22:58 nake 閱讀(3414) | 評論 (4)編輯 收藏
    從8.1號開始,連續(xù)加班,再過1小時結(jié)束。
    posted @ 2006-09-21 02:39 nake 閱讀(976) | 評論 (4)編輯 收藏

    排序的算法是我們最常用的算法,初學(xué)程序,每個人都嘗試過排序。但只是局限于簡單的排序。
    如將下列數(shù)字進行排序
    1,3,5,8,3,6
    于是我們得出結(jié)果
    1,3,3,5,6,8
    將下列字母(字符)進行排序
    a,i,e,f,w,s
    于是我們得出結(jié)果
    a,e,f,i,s,w
    但是我們遇到的情況就不是如此簡單了。如給公司里的商品進行排序,我們很輕易的想到按照商品的名稱排序不就完了,而且簡單明了。但現(xiàn)實并如我們相信般簡單。同一商品名稱可以有不同的批次,進貨時間,可能還會有單價的不同。顯然只根據(jù)商品名稱排序是不合理的。

    再舉個簡單例子然后用程序?qū)崿F(xiàn)。如公司要將員工進行排序(不要說領(lǐng)導(dǎo)排在前面),假設(shè)我們的需求比較復(fù)雜。先進行姓排序,誰的姓拼音靠前,誰就排前面。然后對名字進行排序。恩.如果同名,女性排前頭。如果名字和性別都相同,年齡小的排前頭。ok,一個也不算復(fù)雜的需求。

    如果對java比較熟悉的會知道java.util.Comparator 接口。要實現(xiàn)里面的函數(shù)
    ?int compare(Object o1, Object o2) 返回一個基本類型的整型,返回負(fù)數(shù)表示o1 小于o2,返回0 表示o1和o2相等,返回正數(shù)表示o1大于o2。

    于是我們設(shè)計的人員類要有幾個變量,firstname,lastname,sex,age分別表示姓,名,性別,年齡。


    public class Person {
    ? String firstname,lastname;
    ? Boolean sex;
    ? Integer age;
    ? public Person(String firstname,String lastname,Boolean sex,Integer age) {
    ??? this.firstname = firstname;
    ??? this.lastname = lastname;
    ??? this.sex = sex;
    ??? this.age = age;
    ? }
    ? public String getFirstName() {
    ???? return firstname;
    ?? }

    ?? public String getLastName() {
    ???? return lastname;
    ?? }
    ?? public Boolean getSex() {
    ????? return sex;
    ??? }

    ??? public Integer getAge() {
    ????? return age;
    ??? }

    //為了輸入方便,重寫了toString()

    public String toString()
    ??? {
    ????? return firstname +" "+lastname+" "+(sex.booleanValue()?"男":"女")+" "+age;
    ??? }
    }
    //end person

    下面是要實現(xiàn)比較器


    public class Comparators {
    ? public static java.util.Comparator getComparator() {
    ??? return new java.util.Comparator() {

    ????? public int compare(Object o1, Object o2) {
    ??????? if (o1 instanceof String) {
    ????????? return compare( (String) o1, (String) o2);
    ??????? }
    ?????? else if (o1 instanceof Integer) {
    ????????? return compare( (Integer) o1, (Integer) o2);
    ??????? }

    ?????? else if (o1 instanceof Person) {
    ????? return compare( (Person) o1, (Person) o2);
    ??? }

    ??????? else {
    ????????? System.err.println("未找到合適的比較器");
    ????????? return 1;

    ??????? }
    ????? }

    ????? public int compare(String o1, String o2) {
    ??????? String s1 = (String) o1;
    ??????? String s2 = (String) o2;
    ??????? int len1 = s1.length();
    ??????? int len2 = s2.length();
    ??????? int n = Math.min(len1, len2);
    ??????? char v1[] = s1.toCharArray();
    ??????? char v2[] = s2.toCharArray();
    ??????? int pos = 0;

    ??????? while (n-- != 0) {
    ????????? char c1 = v1[pos];
    ????????? char c2 = v2[pos];
    ????????? if (c1 != c2) {
    ??????????? return c1 - c2;
    ????????? }
    ????????? pos++;
    ??????? }
    ??????? return len1 - len2;
    ????? }

    ????? public int compare(Integer o1, Integer o2) {
    ??????? int val1 = o1.intValue();
    ??????? int val2 = o2.intValue();
    ??????? return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));

    ????? }
    ????? public int compare(Boolean o1, Boolean o2) {

    ???????? return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));

    ?????? }

    ????? public int compare(Person o1, Person o2) {
    ??????? String firstname1 = o1.getFirstName();
    ??????? String firstname2 = o2.getFirstName();
    ??????? String lastname1 = o1.getLastName();
    ??????? String lastname2 = o2.getLastName();
    ??????? Boolean sex1 = o1.getSex();
    ??????? Boolean sex2 = o2.getSex();
    ??????? Integer age1 = o1.getAge();
    ??????? Integer age2 = o2.getAge();
    ??????? return (compare(firstname1, firstname2) == 0 ?
    ??????????????? (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :
    ???????????????? compare(age1, age2)) :
    ???????????????? compare(sex1, sex2)) :
    ???????????????? compare(lastname1, lastname2)) :
    ??????????????? compare(firstname1, firstname2));

    ????? }

    ??? };
    ? }

    }
    以上代碼有可能因為瀏覽器的布局自動換行。
    compare(Person o1, Person o2)的返回值看起來比較別扭。最簡單的是

    ??? public int compare(Boolean o1, Boolean o2) {

    ???????? return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));

    ?????? }

    o1和o2相等返回0,否則o1如果是true 就表示o1大于o2。

    再嘗試輸出結(jié)果看看


    public class Main {
    ? public Main() {
    ? }
    ? public static void main(String[] args) {
    ??? Person[] person = new Person[] {
    ???????? new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)),
    ???????? new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)),
    ???????? new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)),
    ???????? new text.Person("zhuang", "gw", Boolean.FALSE, new Integer(2)),


    ???? };
    ???? for (int i = 0; i < person.length; i++) {
    ?????? System.out.println("before sort=" + person[i]);
    ???? }
    ???? java.util.Arrays.sort(person, Comparators.getComparator());
    ? for (int i = 0; i < person.length; i++) {
    ??? System.out.println("after sort=" + person[i]);
    ? }


    ? }

    }

    輸出結(jié)果:

    before sort=ouyang feng 男 27

    before sort=zhuang gw 男 27

    before sort=zhuang gw 女 27

    before sort=zhuang gw 女 2

    after sort=ouyang feng 男 27

    after sort=zhuang gw 女 2

    after sort=zhuang gw 女 27

    after sort=zhuang gw 男 27


    仔細理解java的Comparator會給你寫排序帶來很大幫助


    ?

    posted @ 2006-05-27 17:20 nake 閱讀(2286) | 評論 (5)編輯 收藏
    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(18)

    我參與的團隊

    隨筆檔案(39)

    收藏夾(1)

    搜索

    •  

    積分與排名

    • 積分 - 451262
    • 排名 - 119

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 69精品免费视频| 久久国产乱子免费精品| 美女黄网站人色视频免费国产| 亚洲无砖砖区免费| 777成影片免费观看| 亚洲av无码片在线观看| 午夜国产精品免费观看| 亚洲制服丝袜第一页| 成人影片麻豆国产影片免费观看| 亚洲国产成人久久| 日韩在线视频免费看| 婷婷亚洲综合一区二区| 亚洲欧洲中文日韩av乱码| 国产在线播放线91免费| 亚洲男人天堂av| 久久WWW免费人成人片| 国产亚洲情侣久久精品| 国产精品亚洲美女久久久| 成人免费区一区二区三区| 久久精品国产亚洲AV香蕉| 国产成人免费网站| 黄色一级视频免费| 亚洲VA中文字幕不卡无码| 亚洲精品视频在线观看免费| 亚洲熟妇无码一区二区三区导航| 亚洲电影日韩精品 | 无码精品国产一区二区三区免费| 精品无码一区二区三区亚洲桃色 | 国产日产成人免费视频在线观看| 新最免费影视大全在线播放| 亚洲AV无码一区二区二三区入口 | 特级做A爰片毛片免费看无码 | 精品日韩亚洲AV无码 | 国产国拍亚洲精品福利| 蜜臀98精品国产免费观看| 亚洲av乱码中文一区二区三区| 久久精品国产亚洲网站| 手机在线免费视频| 国产性生大片免费观看性| 亚洲AV男人的天堂在线观看| 久久亚洲色一区二区三区|