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

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

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

    我的JAVA窩! - BlogJava

    2007年1月1日

    Got Source Code of Kettle

      Using Kettle for more than one year in my project, but still have no time to read the source code of Kettle untill couple of days before (busy or actually lazy?). Yeah, I am a lazy dog...
      Since the source code is not available directly from the Pentato website, I had no choice but to go thru some posts on the Pentaho forum one by one. It didn't take me much effor before I found the relevant post, thx god:) The source code of Kettle now is maintained in SVN of JavaForge, and anybody "can get the latest(subversion trunk) code changes with on this URL: http://svn.javaforge.com/svn/Kettle/trunk", the username is "anonymous" and password is "anon".
      Besides, I had to download a SVN tool. I am using TortoiseSVN in my company, and the ux satisfied me, so I chose it again.
      It taked about 30 minutes to check out all the source code (still very fast I think, my bandwidth is 2M).
      When it done, I imported it as a general project into eclipse, and one thing surprised me a little bit was that, I didn't have to compile the source code or import some jars even than execute a Ant target manually as I built the source code of Spring before. Hah, Kettle is developed by using eclipse?! (you can find some eclipse project files in the trunk).
      Anyway, the work was going on smoothly, no more than 40 minutes. Now I can debug the Kettle, and from my experience, in some scenarios Kettle doesn't work in good performace than I expect, and even sometimes it runs into some bugs when I do the multitudinous insert or update operations. Here I get the opportunity to look into the code and figure out the problem.

      Keep moving forward...

    posted @ 2008-09-15 18:24 J2S 閱讀(1599) | 評論 (3)編輯 收藏

    集合框架類筆記的補充

    java .util.*定義了一系列的接口和類,告訴我們用什么類NEW出一個對象,可以進行超越數組的操作。
    (注:JAVA1.5對JAVA1.4的最大改進就是增加了對范型的支持)

    Set接口是數學中集合的概念:其元素無序,且不可重復。(正好與List對應)

    !!注意數組和集合的區別:數組中只能存簡單數據類型。Collection接口和Map接口只能存對象。

    只有List可用get和size。而Set則不可用(因其無序)。

    集合中每一個元素都有對象,如有字符串要經過強制類型轉換。

    Collections是工具類,所有方法均為有用方法,且方法為static。


    Collections.Sort()分為兩部分,一部分為排序規則;一部分為排序算法。
    規則用來判斷對象;算法是考慮如何排序。
    對于自定義對象,Sort不知道規則,所以無法比較。這種情況下一定要定義排序規則。方式有兩種:
    java.lang下面有一個接口:Comparable(可比較的)
    可以讓自定義對象實現一個接口,這個接口只有一個方法comparableTo(Object o)
    其規則是當前對象與o對象進行比較,其返回一個int值,系統根據此值來進行排序。
    如 當前對象>o對象,則返回值>0;(可將返回值定義為1)
    如 當前對象=o對象,則返回值=0;
    如 當前對象<o對象,則返回值〈0。(可將返回值定義為-1)
    看TestArraylist的java代碼。
    我們通過返回值1和-1位置的調換來實現升序和降序排列的轉換。

    java.util下有一個Comparator(比較器)
    它擁有compare(),用來比較兩個方法。
    要生成比較器,則用Sort中Sort(List,List(Compate))
    第二種方法更靈活,且在運行的時候不用編譯。

    注意:要想實現comparTo()就必須在主方法中寫上implement comparable.


    集合的最大缺點是無法進行類型判定(這個缺點在JAVA1.5中已經解決),這樣就可能出現因為類型不同而出現類型錯誤。
    解決的方法是添加類型的判斷。

    而在LinkedList的底層是一種雙向循環鏈表。在此鏈表上每一個數據節點都由三部分組成:前指針(指向前面的節點的位置),數據,后指針(指向后面的節點的位置)。最后一個節點的后指針指向第一個節點的前指針,形成一個循環。

    LinkedList經常用在增刪操作較多而查詢操作很少的情況下:隊列和堆棧。
    隊列:先進先出的數據結構。
    堆棧:后進先出的數據結構。
    注意:使用堆棧的時候一定不能提供方法讓不是最后一個元素的元素獲得出棧的機會。
    LinkedList提供以下方法:(ArrayList無此類方法)
    addFirst();
    removeFirst();
    addLast();
    removeLast();


    Push用addFirst();pop用removeFirst(),實現后進先出。
    用isEmpty()--其父類的方法,來判斷棧是否為空。

    在隊列中,put為入隊列操作,get為出隊列操作。
    Put用addFirst(),get用removeLast()實現隊列。

    List接口的實現類(Vector)(與ArrayList相似,區別是Vector是重量級的組件,使用使消耗的資源比較多。)
    結論:在考慮并發的情況下用Vector(保證線程的安全)。
    在不考慮并發的情況下用ArrayList(不能保證線程的安全)。

    面試經驗(知識點):
    java.util.stack(stack即為堆棧)的父類為Vector。可是stack的父類是最不應該為Vector的。因為Vector的底層是數組,且Vector有get方法(意味著它可能訪問到并不屬于最后一個位置元素的其他元素,很不安全)。
    對于堆棧和隊列只能用push類和get類。
    Stack類以后不要輕易使用。
    !!!實現堆棧一定要用LinkedList。


    (在JAVA1.5中,collection有queue來實現隊列。)








    posted @ 2007-03-19 22:04 J2S 閱讀(566) | 評論 (1)編輯 收藏

    關于集合框架類的學習筆記

    集合類

    集合類的對象是用來管理其他若干對象的,它類似于C++標準模板庫中的容器,不過在JAVA的集合類的對象中可以用來存放多種類型的對象。

    接口和類共同構成了一個集合框架,集合的概念,一個對象可以裝載多個對象,這個對象就是集合對象。

    集合框架

    1,接口

    Collection 用來管理多個對象,集合中的每個元素都是對象。

    Map,Map中沒有對象,而是鍵值對,由Key,value組成的鍵值對,Key是不可重復的。value是可以相同的,一個Key和一個value一一對應。

    集合中用到的類,接口在java.util包中,在使用時注意將其引入import。

    Collection 接口(以下介紹其子接口)

    1)List 一個List的實現類的對象在管理多個對象時會按順序組織對象(即按照將對象放入的順序存儲),List實現類的對象是由順序的。(注意,順序和排序的區別)

    2)Set 一個Set的實現類表示一個數學概念上的集合,Set的實現類的對象中的元素是無順序的,也就是不會按照輸入順序來存放,Set的實現類對象中的元素是不重復的。

    3)SortedSet,他是Set的子接口,他的實現類會對集合中的元素進行排序。但是要指定排序規則,他會按排序規則進行排序。

    Map 接口(以下介紹其子接口)

    SortedMap,這個接口的實現類同樣可以實現,不過是對鍵值對中的Key進行排序,這個接口的實現類也是要指定排序規
    則的。

    JDK1.4中的集合是不安全的對象,JDK5.0中解決了這個問題

    List接口的實現類

    1> ArrayList是接近于功能的集合類,ArryList的實質就是一個會自動增長的數組,ArrayList是用封裝的數組來實現的List接口的。

    Collection的實現類對象的遍歷方式是用迭代來實現的。
    在使用迭代器時先要活得一個迭代器的對象,Iterator(迭代器接口)這是一個接口,迭代器是在集合類中實現的,也
    就是說,他是一個內部類(匿名內部類)實現的。
    Iterator接口中定義的常用方法方法hasNext(),next()。
    hasNext(),這個方法會使用一個游標,并通過判斷游標指向的位置是否存放有對象。
    next()方法也是Iterator接口中定義好的方法,這個方法會使游標指向下一個元素的位置,游標會跳過第一個元素,并
    返回其中的內容。

    Collections 這是一個工具類,也是java.util包中的,這個類中的sort(list接口的實現類的對象)方法,其參數是一個集合類的對象,這個方法使用來對集合類的對象進行排序的。以后,我將以集合這個名字來稱呼集合類的對象。,對于
    字符串對象內容的集合來說會按字典順序排序(升序),對于數字內容的集合排序也會按照升序排序

    排序可一份為兩部分內容,一個是排序的規則,也就是按照什么來進行排序,并且排成什么樣的順序。
    第二個就是排序的算法,他決定了排序的效率。

    在對自定義的集合內容類型排序時,需要先定義那個類型的排序規則。

    Comparable接口,這個接口中只定義了一個compareTo(Object o),方法的返回至類型是整型,如果當前對象大于參數對象就返回正數,當前對象等于參數對象是就返回0,當前對象小于參數對象時就返回負值,這樣寫就是升序排列,反之則是進行降序排列,在實現這個接口中的方法時,返回值定義方式,只有這兩種。

    根據指定類型的排序規則實現了Comparable接口,那么就可以對存有這個類型的集合進行整體排序。Comparable接口,
    也叫做可比較接口。這個接口在java.lang包下。只要實現了這個接口,就是可排序的

    接下來介紹另外一種對自定義類型對象的集合整體排序的方法,也就是實現比較器接口(Comparator),這個接口中定義了一個compare(Object o1,Object o2)方法來比較兩個對象,這個方法的返回值定義和上面介紹的那個方法是一樣。

    注意:在API,幫助文檔中以上兩個方法的參數類型是T,這代表的模板類型,也就是集合中存放的內容的類型,在JDK1.4中其參數就是Object類型,模板類型的詳細內容會在最后的JDK5.0新特性中講到。

    Comparator接口可以在匿名內部類中實現,Collections 中的sort(集合了的對象,比較器)方法,可以對自定義類型內容的集合進行整體排序。

    2>LinkedList,它是List接口的實現類,其底層是用雙向循環鏈表來實現的

    注意:ArrayList的查詢效率比較高,增刪動作的效率比較差,適用于查詢比較頻繁,增刪動作較少的元素管理的集合。
    ? ? ?LinkedList的查詢效率低,但是增刪效率很高。適用于增刪動作的比較頻繁,查詢次數較少的元素管理集合。

    ArrayList,LinkedList都是線程不安全的
    實現堆棧 1,數組(ArrayList,增刪效率比較低,不適合)
    ? ? ? ? 2,LinkedList實現堆棧的好方法
    ? ? ? ? 3,java.util.Stack類,Stack是Vector的子類,Vector類是一個線程安全的(是一個重量級的類),并繼承
    了Vector的方法,Verctor類和ArrayList的功能近乎相同。(不推薦使用Stack類來實現堆棧)。

    Set接口的實現類

    HashSet

    Set的實現類的集合對象中不能夠有重復元素,HashSet也一樣他是使用了一種標識來確定元素的不重復,HashSet用一種算法來保證HashSet中的元素是不重復的,HashSet的底層實現還是數組

    Object類中的hashCode()的方法是所有子類都會繼承這個方法,這個方法會用Hash算法算出一個Hash(哈希)碼值返回,HashSet會用Hash碼值去和數組長度取模,模(這個模就是對象要存放在數組中的位置)相同時才會判斷數組中的元素和要加入的對象的內容是否相同,如果不同才會添加進去。

    Hash算法是一種散列算法。

    注意:所以要存入HashSet的集合對象中的自定義類必須覆蓋hashCode(),equals()兩個方法,才能保證集合中元素容不重復。在覆蓋和hashCode()方法時,要使相同對象的hashCode()方法返回相同值,覆蓋equals()方法再判斷其內容。為了保證效率,所以在覆蓋hashCode()方法時,也要盡量使不同對象盡量返回不同的Hash碼值。

    如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash值(相同對象),才會用equals()方法來判斷兩個對象的內容是否相同。

    SortedSet接口是Set的子接口。
    TreeSet是SortedSet接口的實現類,他可以對集合中的元素進行排序。
    要存放在TreeSet中自定義類的對象,這個類要么是已經實現了Comparable接口,要么是能給出Comparator比較器,TreeSet可以自動過濾掉重復元素所以不用重載hashCode()方法,TreeSet會根據比較規則判斷元素內容是否相同,TreeSet會在元素存入世就進行了排序。(在TreeSet給出排序規則時,一定要注意對象內容相等的條件,一定要注意在主觀的認為兩個對象內容相同時,才可以使用比較少的條件來進行判斷)

    要排序時才使用TreeSet類(存儲效率比較低),HashSet的存儲效率比較高,在需要為HashSet的對象排序時,就可以把HashSet中的元素放入TreeSet。

    posted @ 2007-03-19 21:55 J2S 閱讀(1189) | 評論 (0)編輯 收藏

    如何最快成為有錢人

    通向財富的道路有千萬條,但條條道路都驚人地相似。而且令人詫異的是,拼命積累財富的男人也驚人地相似,他們在心理特征上就像是同一個模子壓出來的一樣。

    ??? 百萬富翁有諸多特征,絕大多數白手起家的百萬富翁都是出身貧窮的人,積累金錢對于那些一貧如洗的人有著不可抗拒的力量。

    ??? 這些男人是很有冒險精神的,他們敢于冒那些腳踏實地、像苦工似地掙錢的男人所不敢涉足的風險。他們是精明強干的,他們很有遠見卓識;他們的天才在于能知道如何利用別人的主意來賺錢。這是賺錢的真正秘訣——利用別人創造性的思想,并且把它們運用到實際中去。

    ??? 這樣的男人很容易和別人打成一片。他們很有洞察力,他們會觀察別人,知道如何通過與別人打交道來獲得他們所需要的東西,也知道別人對他們的反應如何。追求財富的人內心深處有著強烈的孤獨感,但他們并不因此而去追求政治上的名望和成就。賺錢是他們絕對全神貫注的追求。這給他們勝于一切的最大滿足和快樂。

    ??? 1、讓金錢成為你的情人。

    ??? 別在性愛上浪費時間和精力,你會發現,從長遠來看,賺錢比性愛更讓人興奮,這可不是空頭支票。尋求需求,滿足需求。追求財富者的最大天分是瞄準時機,預測所需。大眾牌小汽車,美國快餐食品都是滿足人們需要的例子。

    ??? 2、謹防從眾心理。

    ??? 群眾心理弊病多,即使它是正確的,追隨它一般也沒有什么利潤。在一般情況下,摘取經濟精華的都是帶頭人而不是追隨者。

    ??? 3、當雇主而不是雇員。

    ??? 那些滿足于雇主付給他們高薪的男人并不是真正追求財富的人,他們的目標僅僅是成就感或權力欲。你最好去當老板,即使雇員只有你一個,賺的錢也會比任何一個公司付給你的多。

    ??? 4、發展你的支配技巧。

    ??? 大多數人認為,支配別人,讓他們去做你想讓他們干的事情非常惡劣。然而,實際情況是,我們時時都在自己沒有意識到的情況下支配著別人。

    ??? 5、追求財富的人常常是直覺地支配著別人,而且是個行家里手。
    ?

    posted @ 2007-02-21 15:40 J2S 閱讀(235) | 評論 (0)編輯 收藏

    終于解脫了...

    ????????下午答辯,還算順利,雖然花了半天時間,沒任何技術含量,但是終于解脫了...

    ?????????五天來平均每天也就睡了不到兩小時,現在真有點頂不住了(意識都模糊了),但是為了把生物鐘調整過來,還是撐一會吧。突然閑下來卻不知道做點什么,20號有個面試,等會沒事把Struts那本書再看看。

    ?????????接下來都不知道寫些什么東西,就把實踐中的一個弄明白的一個小知識記一下:
    在JDBC中,對于游標對象ResultSet的getString()方法也是用游標的模式來讀取數據的(不知道這樣描敘對不對),即,你要取字段1,字段2,就必須先調用rs.getString(1),再調用rs.getString(2),不能反過來,否則不能正確讀取。原因還不知道,有空了研究一下。

    posted @ 2007-01-18 19:56 J2S 閱讀(387) | 評論 (3)編輯 收藏

    期末實踐中......

    今天成績都出來了,結果還是比較理想的,以后會相對輕松些。

    更新日志都是半個月前的事了,當時還說以后每天都更新,真是慚愧

    這幾天都是忙考試,弄得心力憔悴,今天晚上終于閑下來,繼續寫實踐的程序。

    剛剛解決了前幾個小時的困惑,現在對JAVA的內部類機制又有了更新的認識(興奮中......),廢話少說,來看代碼:

    package tanzhang;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Combo;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.TabFolder;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;
    import org.eclipse.swt.widgets.TableItem;
    import org.eclipse.swt.widgets.Text;
    import com.swtdesigner.SWTResourceManager;
    import org.eclipse.swt.widgets.TabItem;
    public class tanzhang {

    ?/**
    ? * Launch the application
    ? * @param args
    ? */
    ?private static Table table;
    ?private static TableItem newItemTableItem;

    ?
    ?public static void main(String[] args) {
    ??final Display display = Display.getDefault();
    ??final Shell shell = new Shell();
    ??shell.setImage(SWTResourceManager.getImage(tanzhang.class, "/org/eclipse/ui/internal/forms/widgets/progress.gif"));
    ??shell.setSize(774, 514);
    ??shell.setText("宣城供電局消弧線圈臺帳");
    ............
    ............
    ............
    ??final Combo combo_1 = new Combo(composite, SWT.READ_ONLY);
    ??combo_1.addSelectionListener(new SelectionAdapter() {
    ???public void widgetSelected(SelectionEvent arg0) {
    ????String str=combo_1.getText();
    ????try{?
    ?????String dbUrl = "jdbc:odbc:test";
    ?????Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    ?????Connection conn = DriverManager.getConnection(dbUrl, "", "");
    ?????Statement stmt=conn.createStatement();
    ?????String sql="SELECT * from test where 單元名稱="+str;
    ?????ResultSet rs=stmt.executeQuery(sql);
    ?????
    ?????if(rs.next()){
    ?????for(int i=0;i<=4;i++){?????????
    ???????newItemTableItem.setText(i,rs.getString(i+1));??
    ???????}
    ?????
    ?????rs.close();
    ?????stmt.close();
    ?????conn.close();
    ?????}
    ????}catch(Exception e){}
    ????
    ???}
    ??});
    ............
    ............
    ............

    ??table = new Table(composite_1, SWT.VIRTUAL | SWT.FULL_SELECTION | SWT.BORDER | SWT.HIDE_SELECTION);

    ??table.setLinesVisible(true);
    ??table.setHeaderVisible(true);
    ??table.setBounds(0, 0, 678, 80);
    ............
    ............
    ............

    ???剛開始是用final修飾table和newItemTableItem,但是“newItemTableItem.setText(i,rs.getString(i+1));”這行(代碼中蘭色那句)會報錯,編譯器提示“無法解析newItemTableItem”。我的第一反應是監聽器的位置放得不對。翻了一下書,說SWT/JFace事件代碼中要訪問類中變量有三種方法:(1)加final;(2)將變量變為類的實例變量;(3)將事件代碼寫成命名內部類,然后通過構造函數的參數來傳入。
    ???想了想好象只有第三種方法值得試試,但是后來想起來newItemTableItem是個對象,傳入以后卻不知道怎么轉換類型,呆了...
    ???最后做了個新的程序試了試,在新程序里是成功的,就是要把newItemTableItem在main函數外申明其為private static,但是在舊的程序中,編譯器是通過了,但是進行連接數據庫查詢的時候,出現“Fatal Exception...”的錯誤,當時一下就蒙掉了!!完全一樣的,怎么會不成功。
    ???百般無奈以后,----當然之前肯定是深思熟慮----終于腦海中閃出了傳說中的“靈感”!于是馬上把table也定義為private static......OK!???勝利總是來得那么突然,那瞬間的感覺就象90分鐘打進的金球...

    ???當然到現在,我還沒找到確切的原因。只能用自己的話總結一下:(1)匿名內部類中的方法是不能訪問其他方法中定義的變量的(包括實例對象),要訪問必須在類中將其定義為static類型。(2)TableItem是Table的子控件,要定義TableItem為static也要同時把Table定義為static類型。

    ???給自己一個任務:研究JAVA的內部類機制;研究SWT中父子控件關系的機制!

    ???看看《Thinking in JAVA》或許會是個不錯的選擇,當然還有《The Definitive Guide to SWT and JFace》。

    ?

    posted @ 2007-01-15 02:41 J2S 閱讀(311) | 評論 (0)編輯 收藏

    考完試了!

    昨天終于考完了!
    都大四了,還用最變態的老師(三大魔頭)來折磨我們,對于這學校真無語了......

    現在終于可以繼續我的自由學習之旅,以后一定每天上來更新blog。
    時間不多了,既然已經飽受過往昏昏惑惑之疾、因循茍且之痛,那么現在就要珍惜分分秒秒,彌補差距。

    今天下午花了兩個小時把XML SPY教程學了一遍(沒想到這么快能搞定),我用的是2007,學的是2005,但基本上沒區別,進度還是蠻快的。最后估計那個xml schema文件沒寫好,最后用xslt轉換沒成功。不過晚上準備再試一次,權當做復習。
    以前都用記事本寫xml,現在用了xml spy感覺真是太好用了,尤其是xml數據與數據庫的互相轉換。而且還可以用工程來管理(還沒試呢),對于開發大一點的程序無疑方便了許多。

    晚上再準備把struts那本書看看。

    對了,今天元旦,祝大家新年快樂,祈禱家人在新的一年里平平安安!

    posted @ 2007-01-01 16:42 J2S 閱讀(219) | 評論 (0)編輯 收藏

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成网站观看在线播放| 免费观看毛片视频| 亚洲精品国产精品乱码不卞| 亚洲AV永久无码精品网站在线观看| 一个人看的www在线观看免费 | 国产亚洲一区二区精品| 亚洲天堂免费在线视频| 亚洲精品视频免费| a高清免费毛片久久| 亚洲精品无码专区在线在线播放 | 国产一区二区三区免费观看在线| 久久久久亚洲AV无码专区桃色| 午夜亚洲乱码伦小说区69堂| 亚洲国产小视频精品久久久三级| 一级毛片在播放免费| 亚洲精品少妇30p| 久久成人a毛片免费观看网站| 亚洲精品在线电影| 毛片A级毛片免费播放| 亚洲AV成人无码网天堂| 国产成人亚洲综合无码| 成人精品一区二区三区不卡免费看| 精品亚洲成a人片在线观看 | 亚洲日韩欧洲无码av夜夜摸| 久久国产精品免费看| 亚洲综合一区无码精品| 免费看国产一级片| 两个人看的www免费视频中文| 久久久亚洲欧洲日产国码aⅴ| 成人性生交视频免费观看| 一级做a爰片性色毛片免费网站| 好看的亚洲黄色经典| 国产麻豆视频免费观看| 男女啪啪免费体验区| 亚洲色图在线播放| 日韩毛片免费在线观看| 国产午夜无码精品免费看动漫| 亚洲愉拍一区二区三区| 亚洲老妈激情一区二区三区| 猫咪社区免费资源在线观看| 国产免费A∨在线播放|