468
京東網上商城
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