閱讀468 返回首頁    go 京東網上商城


Java 筆記06

SortedSet可自動為元素排序。

SortedSet的實現類是TreeSet:它的作用是字為添加到TreeSet中的元素排序。

 

練習:自定義類用TreeSet排序。

與HashSet不同,TreeSet並不需要實現HashCode()和equals()。

隻要實現compareable和compareTo()接可以實現過濾功能。

(注:HashSet不調用CompareTo())。

 

如果要查詢集合中的數據,使用Set必須全部遍曆,所以查詢的效率低。使用Map,可通過查找key得到value,查詢效率高。

集合中常用的是:ArrayList,HashSet,HashMap。其中ArrayList和HashMap使用最為廣泛。

 

使用HashMap,put()表示放置元素,get()表示取元素。

 

遍曆Map,使用keySet()可以返回set值,用keySet()得到key值,使用迭代器遍曆,然後使用put()得到value值。

上麵這個算法的關鍵語句:

Sets=m.keySet();

Interatorit=new interator();

Objectkey=it.next();

Objectvalue=m.get(key);

 

注意:HashMap與HashCode有關,用Sort對象排序。

如果在HashMap中有key值重複,那麼後麵一條記錄的value覆蓋前麵一條記錄。

 

Key值既然可以作為對象,那麼也可以用一個自定義的類。比如:

m.put(newsutdent(“Liucy”,30),”boss”)

如果沒有語句來判定Student類對象是否相同,則會全部打印出來。

 

當我們用自定義的類對象作為key時,我們必須在程序中覆蓋HashCode()和equals()。

 

注:HashMap底層也是用數組,HashSet底層實際上也是HashMap,HashSet類中有HashMap屬性(我們如何在API中查屬性)。HashSet實際上為(key.null)類型的HashMap。有key值而沒有value值。

 

正因為以上的原因,TreeSet和TreeMap的實現也有些類似的關係。

注意:TreeSet和TreeMap非常的消耗時間,因此很少使用。

我們應該熟悉各種實現類的選擇——非常體現你的功底。

 

HashSet VSTreeSet:HashSet非常的消耗空間,TreeSet因為有排序功能,因此資源消耗非常的高,我們應該盡量少使用,而且最好不要重複使用。

基於以上原因,我們盡可能的運用HashSet而不用TreeSet,除非必須排序。

同理:HashMap VS  TreeMap:一般使用HashMap,排序的時候使用TreeMap。

HashMap VSHashtable(注意在這裏table的第一個字母小寫)之間的區別有些類似於ArrayList和Vector,Hashtable是重量級的組件,在考慮並發的情況,對安全性要求比較高的時候使用。

 

Map的運用非常的多。

 

使用HashMap(),如果使用自定義類,一定要覆蓋HashCode()和equals()。

 

重點掌握集合的四種操作:增加、刪除、遍曆、排序。

 

Module8—12利用兩天的時間完成。

Module8:圖形界麵

Module9:事件模型(在本部分最重要)

Module10:AWT

Module11:Swing

Module12:Applet(這個技術基本已經被淘汰)

 

軟件應用的三個發展階段:

單機應用

網絡應用(C/S結構)

BS結構:B表示瀏覽器,S表示server端。即利用瀏覽器作為客戶端,因此對於圖形界麵的要求已經不高,現在的發展趨勢是不使用安裝,即不用任何的本地應用,圖形很快就會被服務器構件開發所取代。

 

經驗之談:Swing的開發工作會非常的累,而且這項技術正在走向沒落。避免從事有這種特征的工作。

AWT也即將被取代。

Module8—Module11所使用的技術都將被JSF技術所取代。

JSF是服務器端的Swing:目前技術已經成熟,但是開發環境(工具)還不成熟。

Module12的Applet技術也將被WebStart所取代。

Module9為重點,所謂事件模型是指觀察者設計模式的JAVA應用。事件模型是重點。

 

Module8:圖形界麵(java.awt.*)

Awt:抽象窗口工具箱,它由三部分組成:

①組件:界麵元素;

②容器:裝載組件的容器(例如窗體);

③布局管理器:負責決定容器中組件的擺放位置。

圖形界麵的應用分四步:

①  選擇一個容器:

⑴window:帶標題的容器(如Frame);

⑵Panel:麵板

通過add()想容器中添加組件。

Java的圖形界麵依然是跨平台的。但是在調用了一個窗體之後隻生成一個窗體,沒有事件的處理,關閉按鈕並不工作。此時隻能使用CTRL+C終止程序。

②設置一個布局管理器:用setLayout();

③向容器中添加組件;

①  添加組件的事務處理。P198

 

P204:Panel也是一種容器:但是不可見的。在設置容易的時候不要忘記設置它們的可見性。

Panel pan=new Panel;

Fp.setLayout(null);表示不要布局管理器。

 

五種布局管理器:

P206:Flow Layout(流式布局):按照組件添加到容器中的順序,順序排放組件位置。默認為水平排列,如果越界那麼會向下排列。排列的位置隨著容器大小的改變而改變。

Panel默認的布局管理器為Flow Layout。

 

Border Layout:會將容器非常五個區域:東西南北中。

語句:

Button b1=new Botton(“north”);//botton上的文字

f.add(b1,”North”);//表示b1這個botton放在north位置

注:一個區域隻能放置一個組件,如果想在一個區域放置多個組件就需要使用Panel來裝載。

Frame和Dialog的默認布局管理器是Border Layout。

 

Grid Layout:將容器生成等長等大的條列格,每個塊中放置一個組件。

f.setLayout GridLayout(5,2,10,10)//表示條列格為5行2類,後麵為格間距。

 

CardLayout:一個容器可以放置多個組件,但每次隻有一個組件可見(組件重疊)。

使用first(),last(),next()可以決定哪個組件可見。可以用於將一係列的麵板有順序地呈現給用戶。

 

重點:GridBag Layout:在Grid中可指定一個組件占據多行多列,GridBag的設置非常的煩瑣。

 

Module9:AWT:事件模型

事件模型指的是對象之間進行通信的設計模式。

對象1給對象2發送一個信息相當於對象1引用對象2的方法。

模型即是一種設計模式(約定俗成)

對象對為三種:

①事件源:發出事件者;

②事件對象:發出的事件本身;

②  事件監聽器:提供處理事件指定的方法。

 

Java AWT事件模型也稱為授權事件模型,指事件可以和監聽器之間事先建立一種關係:約定那些事件如何處理,由誰去進行處理。這種約定稱為授權。

一個事件源可以授權多個監聽者(授權也稱為監聽者的注冊);

多個事件源也可以注冊多個事件監聽器。

監聽者對於事件源的發出的事件作出響應。

 

在java.util中有EventListener接口:所有事件監聽者都要實現這個接口。

java.util中有EventObject類:所有的事件都為其子類。

 

事件範例在\CoreJava\Girl.java文件中。(文件已加注釋)                                          

 

注意:接口因對不同的事件監聽器對其處理可能不同,所以隻能建立監聽的功能,而無法實現處理。

 

下麵程序建立監聽功能:

//監聽器接口要定義監聽器所具備的功能,定義方法

{

  void WhatIdoWhenGirlHappy(EmotionEvent e);

void WhatIdoWhenGirlSad(EmotionEvente);

}

注意查看參考書:事件的設置模式,如何實現授權模型。

 

事件模式的實現步驟:

開發事件對象(事件發送者)——接口——接口實現類——設置監聽對象

一定要理解透徹Gril.java程序。

 

重點:學會處理對一個事件源有多個事件的監聽器(在發送消息時監聽器收到消息的排名不分先後)。

事件監聽的響應順序是不分先後的,不是誰先注冊誰就先響應。

事件監聽由兩個部分組成(接口和接口的實現類)。

事件源     事件對象                        事件監聽

 gril      EmotinEvent       EmotionListener(接口)、Boy(接口的實現類)

鼠標事件:MouseEvent,接口:MouseListener。

P235 ActionEvent。

注意在寫程序的時候:import java.awt.*;以及import java.awt.event.*注意兩者的不同。

 

在生成一個窗體的時候,點擊窗體的右上角關閉按鈕激發窗體事件的方法:窗體Frame為事件源,WindowsListener接口調用Windowsclosing()。

為了配合後麵的實現,我們必須將WindowsListener所有的方法都實現,除了Windowsclosing方法,其餘的方法均為空實現。

(練習:寫一個帶button窗體,點關閉按鈕退出。)

上麵程序中實現了許多不必要的實現類,雖然是空實現。

為了避免上麵那些無用的實現,可以利用WindowEvent的一個WindowEvent類,還是利用windowsListener。還有WindowAdapter類,它已經實現了WindowsListener。它給出的全部都是空實現,那就可以隻寫想要實現的類,去覆蓋其中的類,就不用寫空實現。

注意:監聽過多,會拋tooManyListener例外。

最後更新:2017-04-02 16:47:44

  上一篇:go Spring中的AOP詳解
  下一篇:go 《黑客與畫家》