版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
關于集合和異常處理第1頁,講稿共67頁,2023年5月2日,星期三集合注意:不是所有的集合類都是從Collection繼承第2頁,講稿共67頁,2023年5月2日,星期三集合接口(Conllection接口)第3頁,講稿共67頁,2023年5月2日,星期三集合接口(Map接口)第4頁,講稿共67頁,2023年5月2日,星期三集合框架第5頁,講稿共67頁,2023年5月2日,星期三集合有三種類型List:事物列表Set:唯一的事物列表Map具有唯一ID的事物第6頁,講稿共67頁,2023年5月2日,星期三List接口下的幾個實現(xiàn)類ArrayList:一個可增長的數(shù)組,提供快速遍歷和快速隨機訪問,當需要快速遍歷時而不是做大量刪除和插入時,用ArrayListVector(Hashtable)為了線程安全,Vector方法被同步,通常使用ArrayList而不用Vector。ArrayList和Vector是唯一的兩個設計了RadomAccess方法類第7頁,講稿共67頁,2023年5月2日,星期三Set接口下的幾個實現(xiàn)類Set接口:重在數(shù)據的唯一性,不允許重復,set接口通過equals()方法確定兩個對象是否相等,重復時只能有一個放在set中。Set的三種實現(xiàn)類HashSet:未排序、未分類的集合,不能重復插入值,不關心數(shù)據順序時使用LinkedHashSet:一個排序,但未分類的集合,在元素之間使用一個雙向鏈表來連接,當關心遍歷順序時使用LinkedHashSet,它將按插入的順序進行遍歷,當使用HashSet時遍歷的順序是不可預知的。TreeSet:按照一種二叉樹的結構進行存儲,并可以保證遍歷時,會按照元素的自然順序進行排序。也可以自己構造一個TreeSet,讓其按照自己的想法進行排序第8頁,講稿共67頁,2023年5月2日,星期三Map接口下的實現(xiàn)類Map接口:按“鍵-值”對進行插入,(鍵、值都是對象)可以按照鍵來搜索值對象可以查找值的集合,也可以查找鍵的集合HashMap:一種未分類,未排序的映射類,不需要順序時HashMap是一種最好的選擇,因為其效率較高,HashMap允許集合中有一個null鍵和多個null值。Hashtable:Hashtable是HashMap的同步版本,但Hashtable不允許有任何的null存在。LinkedHashMap:和linkedHashSet一樣,LinkedHashMap維護插入和訪問的順序,添加和刪除比HashMap慢,但遍歷的速度要更快。TreeMap:一個順序的Map集合。第9頁,講稿共67頁,2023年5月2日,星期三集合函數(shù)集合的定義;---是將多個元素組成一個單元的對象.作用:---集合用于存儲、檢索和操作數(shù)據,以己將數(shù)據從一個方法傳輸至另一個方法。經常使用到的java.util包中的:ArrayList、LinkdList,、HashMap、Vector、List和Map等類和接口。第10頁,講稿共67頁,2023年5月2日,星期三ArrayList類的概念ArrayList對象:是長度可變的對象引用數(shù)組,用于創(chuàng)建動態(tài)數(shù)組。它擴展AbstractList并實現(xiàn)List接口。三個之間的比較:List是有序的集合,可以包含重復的元素。AbstractList類實現(xiàn)List接口,有助隨機方式訪問元素。ArrayList在訪問和遍歷對象時,性能優(yōu)。第11頁,講稿共67頁,2023年5月2日,星期三ArrayList類java.lang.Object
java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.ArrayList<E>
第12頁,講稿共67頁,2023年5月2日,星期三ArrayList特性ArrayList支持按照需要增長的動態(tài)數(shù)組。在java中,標準數(shù)組是固定長度的,數(shù)組創(chuàng)建以后,不能增長或者收宿。而arrarylist可以動態(tài)增減大小,數(shù)組列表初始長度超過時,集合自動增長;當刪除時,集合自動變小。第13頁,講稿共67頁,2023年5月2日,星期三ArrayList類優(yōu)點每個ArrayList實例都有一個容量。該容量是指用來存儲列表元素的數(shù)組的大小。它總是至少等于列表的大小。隨著向ArrayList中不斷添加元素,其容量也自動增長。并未指定增長策略的細節(jié),因為這不只是添加元素會帶來分攤固定時間開銷那樣簡單。第14頁,講稿共67頁,2023年5月2日,星期三ArrayList類構造方法構造方法:ArrayList()
構造一個初始容量為10的空列表。ArrayList(Collection<?extendsE>
c)
構造一個包含指定collection的元素的列表,這些元素是按照該collection的迭代器返回它們的順序排列的。ArrayList(int
initialCapacity)
構造一個具有指定初始容量的空列表。第15頁,講稿共67頁,2023年5月2日,星期三ArrayList類常用方法常用方法:
booleanadd(E
e)
將指定的元素添加到此列表的尾部。
voidadd(int
index,E
element)
將指定的元素插入此列表中的指定位置。Voidclear()
移除此列表中的所有元素。
voidtrimToSize()
將此ArrayList實例的容量調整為列表的當前大小。E
set(int
index,E
element)
用指定的元素替代此列表中指定位置上的元素。第16頁,講稿共67頁,2023年5月2日,星期三ArrayList類常用方法
booleanremove(int
index)
移除此列表中指定位置上的元素。
booleanremove(Object
o)
移除此列表中首次出現(xiàn)的指定元素(如果存在)。
intsize()
返回此列表中的元素數(shù)BooleanisEmpty()
如果此列表中沒有元素,則返回true
E
get(int
index)
返回此列表中指定位置上的元素。
voidensureCapacity(int
minCapacity)
如有必要,增加此ArrayList實例的容量,以確保它至少能夠容納最小容量參數(shù)所指定的元素數(shù)。第17頁,講稿共67頁,2023年5月2日,星期三ArraryList示例:ArrayListls=newArrayList();ls.add("a");ls.add("b");ls.add("c");ls.add("d");ls.add(2,"4");ls.get(2);ls.trimToSize();ls.set(1,"haocai");ls.ensureCapacity(6);ls.isEmpty();ls.removeAll(ls);//removeRange(1,3);ls.remove(3);ls.clear();System.out.println(ls.get(4));System.out.println(ls.isEmpty());System.out.println(ls);第18頁,講稿共67頁,2023年5月2日,星期三ArrayList類ArrayListls=newArrayList();t3b=newt3();ls.add("C");ls.add("F");ls.add("E");ls.add("D");ls.add(b);ls.remove(4);System.out.println(ls.size());System.out.println(ls);第19頁,講稿共67頁,2023年5月2日,星期三Vector類java.util
類Vector<E>java.lang.Objectjava.util.AbstractCollection<E>java.util.AbstractList<E>
java.util.Vector<E>
第20頁,講稿共67頁,2023年5月2日,星期三Vector類Vector類可以實現(xiàn)可增長的對象數(shù)組。與數(shù)組一樣,它包含可以使用整數(shù)索引進行訪問的組件。但是,Vector的大小可以根據需要增大或縮小,以適應創(chuàng)建Vector后進行添加或移除項的操作。第21頁,講稿共67頁,2023年5月2日,星期三Vector類常用的方法
voidaddElement(E
obj)
將指定的組件添加到此向量的末尾,將其大小增加1。voidinsertElementAt(E
obj,int
index)
將指定對象作為此向量中的組件插入到指定的index處。
E
elementAt(int
index)
返回指定索引處的組件。
booleancontains(Object
o)
如果此向量包含指定的元素,則返回true。
String
toString()
返回此向量的字符串表示形式,其中包含每個元素的String表示形式。第22頁,講稿共67頁,2023年5月2日,星期三Vector類常用的方法
E
set(int
index,E
element)
用指定的元素替換此向量中指定位置處的元素。
E
remove(int
index)
移除此向量中指定位置的元素。
intindexOf(Object
o)
返回此向量中第一次出現(xiàn)的指定元素的索引,如果此向量不包含該元素,則返回-1。第23頁,講稿共67頁,2023年5月2日,星期三Vector類常用的方法
E
set(int
index,E
element)
用指定的元素替換此向量中指定位置處的元素。
E
remove(int
index)
移除此向量中指定位置的元素。
intindexOf(Object
o)
返回此向量中第一次出現(xiàn)的指定元素的索引,如果此向量不包含該元素,則返回-1。第24頁,講稿共67頁,2023年5月2日,星期三Enumeration類Enumeration是一個接口類,它提供了一種訪問各種數(shù)據結構中的所有數(shù)據抽象機制,就是我們要訪問各種數(shù)據結構中的所有元素時,都可以使用同樣方式,調用同樣的方法。實現(xiàn)Enumeration接口的對象,它生成一系列元素,一次生成一個。第25頁,講稿共67頁,2023年5月2日,星期三Enumeration類
booleanhasMoreElements()
測試此枚舉是否包含更多的元素。空是返回false,則ture;
EnextElement()
如果此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素,取出保存對象。第26頁,講稿共67頁,2023年5月2日,星期三Enumeration類示例Vectorv=newVector();v.addElement(“a”);v.addElement(“b”);第27頁,講稿共67頁,2023年5月2日,星期三Iterator迭代器集合通常,有許多情況需要遍歷集合中的元素,例如顯示集合中的每一個元素。一種遍歷方法是使用迭代器(iterator),它是實現(xiàn)iterator或者ListIterator接口的一個對象。使用迭代器能夠在集合中遍歷以獲得或者刪除元素.第28頁,講稿共67頁,2023年5月2日,星期三Iterator迭代器對collection進行迭代的迭代器。迭代器取代了JavaCollectionsFramework中的Enumeration。迭代器與枚舉有兩點不同:迭代器允許調用者利用定義良好的語義在迭代期間從迭代器所指向的collection移除元素。方法名稱得到了改進。第29頁,講稿共67頁,2023年5月2日,星期三Iterator迭代器的方法方法:
booleanhasNext()
如果仍有元素可以迭代,則返回true。
E
next()
返回迭代的下一個元素。
voidremove()
從迭代器指向的collection中移除迭代器返回的最后一個元素(可選操作)。第30頁,講稿共67頁,2023年5月2日,星期三Iterator常用類演示//數(shù)組迭代Iteratoritr=al.iterator();//如果仍有元素可以迭代,則返回true//循環(huán)while(itr.hasNext()){
//
對象,返回迭代的下一個元素。Objectelement=itr.next();//打印System.out.print(element);}第31頁,講稿共67頁,2023年5月2日,星期三HashSet類java.util
類HashSet<E>java.lang.Object
java.util.AbstractCollection<E>java.util.AbstractSet<E>java.util.HashSet<E>此類實現(xiàn)Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證set的迭代順序;特別是它不保證該順序恒久不變。此類允許使用null元素。第32頁,講稿共67頁,2023年5月2日,星期三HashSet類方法
intsize()
返回此set中的元素的數(shù)量(set的容量)。
booleanadd(E
e)
如果此set中尚未包含指定元素,則添加指定元素。
voidclear()
從此set中移除所有元素。BooleanisEmpty()
如果此set不包含任何元素,則返回true。第33頁,講稿共67頁,2023年5月2日,星期三HashSet類方法示例HashSeths=newHashSet();hs.add("ok");hs.remove("ok");System.out.print(hs.size());System.out.print(hs);第34頁,講稿共67頁,2023年5月2日,星期三Hashtable類java.util
類Hashtable<K,V>java.lang.Object
java.util.Dictionary<K,V>java.util.Hashtable<K,V>此類實現(xiàn)一個哈希表,該哈希表將鍵映射到相應的值。任何非null對象都可以用作鍵或值。第35頁,講稿共67頁,2023年5月2日,星期三Hashtable類如果很多條目要存儲在一個Hashtable
中,那么與根據需要執(zhí)行自動rehashing操作來增大表的容量的做法相比,使用足夠大的初始容量創(chuàng)建哈希表或許可以更有效地插入條目。初始容量主要控制空間消耗與執(zhí)行rehash
操作所需要的時間損耗之間的平衡。如果初始容量大于Hashtable所包含的最大條目數(shù)除以加載因子,則永遠不會發(fā)生rehash
操作。但是,將初始容量設置太高可能會浪費空間。第36頁,講稿共67頁,2023年5月2日,星期三Hashtable類方法
V
put(K
key,V
value)
將指定key
映射到此哈希表中的指定value。Enumeration<K>keys()
返回此哈希表中的鍵的枚舉。
intsize()
返回此哈希表中的鍵的數(shù)量。String
toString()
返回此Hashtable對象的字符串表示形式,其形式為ASCII字符",
"(逗號加空格)分隔開的、括在括號中的一組條目。
Object.hashCode()
返回一個叫閃列碼的值。第37頁,講稿共67頁,2023年5月2日,星期三Hashtable類方法實例
Hashtableht=newHashtable();ht.put("okok",newDouble(12.33));System.out.print(ht);}第38頁,講稿共67頁,2023年5月2日,星期三properties類Properties
類表示了一個持久的屬性集。Properties
可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。一個屬性列表可包含另一個屬性列表作為它的“默認值”;如果未能在原有的屬性列表中搜索到屬性鍵,則搜索第二個屬性列表。因為Properties
繼承于Hashtable,所以可對Properties
對象應用put
和putAll
方法。但不建議使用這兩個方法,因為它們允許調用者插入其鍵或值不是String
的項。相反,應該使用setProperty
方法。如果在“不安全”的Properties
對象(即包含非String
的鍵或值)上調用store
或save
方法,則該調用將失敗。類似地,如果在“不安全”的Properties
對象(即包含非String
的鍵)上調用propertyNames
或list
方法,則該調用將失敗。第39頁,講稿共67頁,2023年5月2日,星期三properties類
voidload(Reader
reader)
按簡單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對)。
voidstore(OutputStream
out,String
comments)
以適合使用load(InputStream)
方法加載到Properties
表中的格式,將此Properties
表中的屬性列表(鍵和元素對)寫入輸出流。第40頁,講稿共67頁,2023年5月2日,星期三properties類方法演示Propertiessets=newProperties();
try{sets.store(newFileOutputStream("d:\\a.txt"),"ThisProgramisused:");
sets.put("saa",newInteger(3421));System.out.print(sets);
}catch(Exceptione){e.printStackTrace();}}第41頁,講稿共67頁,2023年5月2日,星期三什么是異常?異常類通常用來定義程序所遇到的輕微異外。可以寫代碼來處理異常并繼續(xù)程序執(zhí)行,而不是讓程序中斷。例如:發(fā)生下列情況時,會出現(xiàn)異常:想打開的文件不存在網絡連接中斷受控操作數(shù)超出預定范圍非常感興趣地正在裝載的類文件丟失第42頁,講稿共67頁,2023年5月2日,星期三7.4異常關系圖第43頁,講稿共67頁,2023年5月2日,星期三異常機制有什么作用?在程序中發(fā)生錯誤時,發(fā)現(xiàn)錯誤的方法能拋出一個異常到其調用程序。然后,調用方法捕獲該異常,以一定的方法處理異常并繼續(xù)程序執(zhí)行。這個方案給程序員一個寫處理程序的選擇,來處理異常。它為系統(tǒng)和用戶之間提供了一種友好的交互方式。第44頁,講稿共67頁,2023年5月2日,星期三異常分類第45頁,講稿共67頁,2023年5月2日,星期三實例
//HelloWorld程序版本的簡單擴展publicclassHelloWorld{
publicstaticvoidmain(Stringargs[]){
inti=0;
Stringgreetings[]={"Helloworld!",
"No,Imeanit!","HELLOWORLD!!"};
while(i<4){
System.out.println(greetings[i]);
i++;
}
}}第46頁,講稿共67頁,2023年5月2日,星期三Error表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。RuntimeException表示一種設計或實現(xiàn)問題,即如果程序運行正常,從不會發(fā)生的情況(比如剛才的數(shù)組越界)。
IOException表示輸入輸出過程中出現(xiàn)的異常分類說明第47頁,講稿共67頁,2023年5月2日,星期三運行結果編譯執(zhí)行,輸出結果如下:
Helloworld!
No,Imeanit!
HELLOWORLD!!
java.lang.ArrayIndexOutOfBoundsException:
atHelloWorld.main(HelloWorld.java:12)原因:當i=3是,按照循環(huán)中的規(guī)定,要輸出的greetings[3]不存在,超出了數(shù)組的邊界,因而產生異常。第48頁,講稿共67頁,2023年5月2日,星期三異常處理Java編程語言提供了一個來考慮哪個異常被拋出以及如何來恢復它的機制。try和catch語句調用棧機制finally語句重訪前例
第49頁,講稿共67頁,2023年5月2日,星期三try和catch語句try{
//可能拋出異常的代碼段;
}catch(MyExceptionTypee){
//處理一個特殊的異常;
}catch(Exceptione){
//處理一個普通的異常;
}將能夠拋出異常的代碼放入try塊中,然后創(chuàng)建相應的catch塊的列表。如果生成的異常與catch中提到的相匹配,catch條件的塊語句就被執(zhí)行。在try塊之后,可能有許多catch塊,每一個都處理不同的異常。一定要將特殊的異常寫在前面。第50頁,講稿共67頁,2023年5月2日,星期三調用棧機制
如果方法中的一個語句拋出一個沒有在相應的try/catch塊中處理的異常,那么這個異常就被拋出到調用方法中。如果異常也沒有在調用方法中被處理,它就被拋出到該方法的調用程序。這個過程要一直延續(xù)到異常被處理。如果一直到main()中仍沒有被處理,那么該異常就中斷程序的執(zhí)行。
第51頁,講稿共67頁,2023年5月2日,星期三main()
上拋異常first()
上拋異常second()
總經理
(問題解決不了)部門經理
(問題解決不了)辦事員一個事例對照第52頁,講稿共67頁,2023年5月2日,星期三finally語句
try{
//可能出現(xiàn)異常的代碼段;
}
finally{
//總是執(zhí)行的代碼段;
}
finally語句定義一個總是執(zhí)行的代碼塊,而不考慮異常是否被捕獲。即使try代碼塊和catch塊中使用return語句退出當前方法或break跳出某個循環(huán),finally
代碼塊都要執(zhí)行。Finally中的代碼塊不能被執(zhí)行的唯一情況是:在被保護代碼塊中執(zhí)行了System.exit(0)第53頁,講稿共67頁,2023年5月2日,星期三//對前面一個HelloWorld程序的補充,加入了異常處理部分publicclassHelloWorld2{
publicstaticvoidmain(Stringargs[]){
inti=0; Stringgreetings[]={"Helloworld!", "No,Imeanit!","HELLOWORLD!!"};
while(i<4){
try{ System.out.println(greetings[i]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("Re-settingIndexValue");
}finally{
System.out.println("Thisisalwaysprinted");} i++;}}改進前面的例子第54頁,講稿共67頁,2023年5月2日,星期三
Helloworld!
Thisisalwaysprinted
No,Imeanit!
Thisisalwaysprinted
HELLOWORLD!!
Thisisalwaysprinted
Re-settingIndexValue
Thisisalwaysprinted
執(zhí)行結果
第55頁,講稿共67頁,2023年5月2日,星期三處理或聲明規(guī)則
當一個方法出現(xiàn)問題時程序員可以采取以下兩種措施:
通過將try{}和catch(){}塊納入其代碼中,在這里捕獲給被命名為屬于某個超類的異常,并調用方法處理它。即使catch塊是空的,這也算是處理情況。
讓被調用的方法表示它將不處理異常,而且該異常將被拋回到它所遇到的調用方法中。它是通過throws關鍵字來聲明的,其格式如下:publicvoidtroublesome()throwsIOException第56頁,講稿共67頁,2023年5月2日,星期三Throws例子publicclassTestException{ publicstaticvoidmain(String[]args) { try { intreslut=newTest().devide(3,0); System.out.println("theresultis"+reslut); } catch(Exceptione) { System.out.println(e.getMessage()); } System.out.println("programisrunninghere,thatisnormal!"); }}classTest{ publicintdevide(intx,inty)throwsException { intresult=x/y; returnx/y; }}第57頁,講稿共67頁,2023年5月2日,星期三創(chuàng)建自己的異常
用戶定義異常是通過擴展Exception類來創(chuàng)建的。它包含一個構造函數(shù)、幾個變量以及方法;使用語句來拋出已經創(chuàng)建的異常:
thrownewMyException();第58頁,講稿共67頁,2023年5月2日,星期三class
IllegalValueException
extends
Exception{}classUserTrial{int
val1,val2;public
UserTrial(int
a,int
b){val1=a;val2=b;}void
show()
throws
IllegalValueException{if((val1<0)||(val2>0))
throw
new
IllegalValueException();
System.out.println("value1="+val1);System.out.println("value2="+val2);}}第59頁,講稿共67頁,2023年5月2日,星期三public
class
ThrowExample{public
static
void
main(String[]args){UserTrialvalues=new
UserTrial(-1,1);try{values.show();}catch(IllegalValueException
e){//e.printStackTrace();System.out.println("非法值");}}}第60頁,講稿共67頁,2023年5月2日,星期三實例
(定義一個叫MyException異常)publicclassMyExceptionextendsException{privateintnum;//當前錯誤號
publicstaticfinalintDATA_FORMATERR=100;//定義常量
publicMyException(intnum){this.num=num;}publicStringgetMessage(){Stringmsg=null;switch(num){caseDATA_FORMAT_ERR:msg="數(shù)據格式錯誤"; break; default:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資入股合作協(xié)議書模板
- 余甘子種苗生產技術規(guī)程
- 2024年培訓班兼職教師聘用合同模板
- 建筑行業(yè)勞動合同范本
- 回收協(xié)議書范本2024年
- 個人車位買賣協(xié)議樣本
- 2024年三人結伙協(xié)議書范本
- 合作項目保密協(xié)議書2024年
- 版權承包協(xié)議樣本
- 房地產合同范本:房屋出售協(xié)議書
- 《學生心理健康教育》課件
- 2022年中國鐵路太原局集團有限公司招聘考試真題
- 分解因式-十字相乘法
- 薄荷的栽培技術
- 副食品、蔬菜、水果、肉類配送項目(完整版)投標文件
- 新大氣污染防治法培訓課件
- 部編版三年級上冊道德與法治第一單元《快樂學習》知識要點歸納
- 浙江省金華市2022-2023學年六年級上學期期中科學試卷
- 教師資格證必背時政類教育熱點
- 政府采購基礎知識培訓(最終稿)
- 建筑業(yè)企業(yè)資質管理制度
評論
0/150
提交評論