第十二天-類集框架JDBC_第1頁
第十二天-類集框架JDBC_第2頁
第十二天-類集框架JDBC_第3頁
第十二天-類集框架JDBC_第4頁
第十二天-類集框架JDBC_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、3.1、認(rèn)識類集(理解)如果現(xiàn)在要想保存多個對象,肯定使用對象數(shù)組完成,但是對象數(shù)組本身有一個最大的問題在于其數(shù)據(jù)的長度,所以后來使用了鏈表完成了動態(tài)對象數(shù)組的開發(fā),可是鏈表的開發(fā)難度實在是很大,而且如果一個鏈表要想真正去使用,只依靠之前所編寫的還不夠,還需要進(jìn)行一些代碼的調(diào)優(yōu)。而在JDK 1.2之后正式引入了類集的概念,類集是一種動態(tài)的對象數(shù)組,屬于各個數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)類,在整個類集之中主要的組成是一些核心的操作接口:Collection、List、Set、Map、Iterator、Enumeration。3.2、單值保存的最大父接口:Collection(重點)所謂的單值保存指的是每一次操作

2、只會保存一個對象,就好像之前的鏈表程序一樣,每一次只保存了一個對象,在Collection接口之中定義了如下的一些操作方法。No.方法名稱類型描述1public boolean add(E e)普通數(shù)據(jù)增加2public void clear()普通清除數(shù)據(jù)3public boolean contains(Object o)普通查找數(shù)據(jù)是否存在4public boolean isEmpty()普通判斷是否為空集合5public Iterator iterator()普通為Iterator接口實例化6public boolean remove(Object o)普通刪除數(shù)據(jù)7public int

3、 size()普通取得集合的個數(shù)8public Object toArray()普通將集合變?yōu)閷ο髷?shù)組在Collection接口之中一共定義了15個方法,在所有的方法之中,只有兩個方法最為常用:add()、iterator()。不過從開發(fā)上講,很少會去直接使用Collection,都會使用Collection的兩個子接口:List、Set。3.3、允許重復(fù)的子接口:List(重點,80%)List是Collection的一個最為常用的子接口,首先這個接口的定義如下:public interface List extends Collection但是List接口對Collection接口進(jìn)行了大

4、量的擴充,但是擴充之后的主要方法:No.方法名稱類型描述1public E get(int index)普通取得指定索引位置上的數(shù)據(jù)2public E set(int index, E element)普通修改指定索引位置上的數(shù)據(jù)3public ListIterator listIterator()普通為ListIterator接口實例化但是以上的三個方法,只是針對于List接口起作用,而List接口有兩個常用子類:ArrayList、Vector。3.3.1、新的子類:ArrayList,95%ArrayList是List子接口使用最多的一個子類,而這個類的定義如下:public class

5、 ArrayListextends AbstractListimplementsList, RandomAccess, Cloneable, Serializable按照面向?qū)ο蟮母拍顏碇v,現(xiàn)在使用ArrayList主要的目的是為List接口實例化,所有的操作方法都以List接口為主。范例:使用ArrayList進(jìn)行List接口的功能驗證packagecn.mldn.demo;importjava.util.ArrayList;importjava.util.List;publicclassTestDemo publicstaticvoidmain(String args)throwsExce

6、ption List all =newArrayList() ;all.add(Hello) ;all.add(Hello) ;/內(nèi)容重復(fù)了all.add(World) ;for(intx = 0; x all.size(); x+) String str = all.get(x) ;/ get()方法只有List接口有System.out.print(str +、);在使用代碼的時候可以發(fā)現(xiàn),List集合之中即使存在了重復(fù)數(shù)據(jù),也可以正常的保存,而且數(shù)據(jù)保存的順序就是存入數(shù)據(jù)的順序。范例:使用List集合修改之前的程序packagecn.mldn.demo;importjava.util.A

7、rrayList;importjava.util.List;interfaceAnimal /動物publicString getName() ;publicintgetAge() ;classZoo privateListanimals=newArrayList() ;/多個動物publicvoidadd(Animal ani) /增加動物this.animals.add(ani) ;/增加動物publicvoiddelete(Animal ani) this.animals.remove(ani) ;/需要equals()publicList search(String keyWord)

8、List result =newArrayList() ;for(intx = 0 ; x this.animals.size() ; x +) Animal ani =this.animals.get(x) ;if(ani.getName().contains(keyWord) /滿足result.add(ani) ;returnresult ;classDogimplementsAnimal privateStringname;privateintage;publicDog(String name,intage) = name ;this.age= age ;publicString ge

9、tName() return;publicintgetAge() returnthis.age;publicbooleanequals(Object obj) if(this= obj) returntrue;if(obj =null) returnfalse;if(!(objinstanceofDog) returnfalse;Dog dog = (Dog) obj ;if(.equals()&this.age= dog.age) returntrue;returnfalse;publicString toString() return狗的信息名字:+,年齡:+this.age;classT

10、igerimplementsAnimal privateStringname;privateintage;publicTiger(String name,intage) = name ;this.age= age ;publicString getName() return;publicintgetAge() returnthis.age;publicbooleanequals(Object obj) if(this= obj) returntrue;if(obj =null) returnfalse;if(!(objinstanceofTiger) returnfalse;Tiger t =

11、 (Tiger) obj ;if(.equals()&this.age= t.age) returntrue;returnfalse;publicString toString() return老虎的信息名字:+,年齡:+this.age;publicclassTestDemo publicstaticvoidmain(String args) Zoo zoo =newZoo() ;/動物園zoo.add(newDog(花狗,1) ;zoo.add(newDog(黃狗,1) ;zoo.add(newDog(黑狗,1) ;zoo.add(newDog(斑點狗,1) ;zoo.add(newTig

12、er(斑點虎,2) ;zoo.add(newTiger(黑虎,2) ;zoo.add(newTiger(花虎,2) ;zoo.delete(newDog(斑點狗,1) ;/刪除List result = zoo.search(斑點) ;for(intx = 0 ; x result.size() ; x +) System.out.println(result.get(x) ;至少此時的程序不再需要自己去開發(fā)鏈表了,所有的鏈表的實現(xiàn)類都有了。3.3.2、舊的子類:Vector,5%Vector類是在JDK 1.0的時候就推出的一個最早的實現(xiàn)動態(tài)數(shù)組的操作類,實際上對于今天而言,有許多的類上依然

13、還是在使用著Vector,不過從實際的開發(fā)來講,現(xiàn)在設(shè)計的一些程序都是針對于接口的操作了。packagecn.mldn.demo;importjava.util.List;importjava.util.Vector;publicclassTestDemo publicstaticvoidmain(String args)throwsException List all =newVector() ;all.add(Hello) ;all.add(Hello) ;/內(nèi)容重復(fù)了all.add(World) ;for(intx = 0; x all.size(); x+) String str =

14、all.get(x) ;/ get()方法只有List接口有System.out.print(str +、);因為所有的操作都是針對于接口完成的,接口定義的方法不變,子類隨便變。面試題:請解釋ArrayList和Vector的區(qū)別?No.區(qū)別ArrayListVector1推出時間JDK 1.2JDK 1.02性能采用異步處理方式,性能更高采用同步處理方式,性能相對較低3安全性非線程安全線程安全4輸出Iterator、ListIterator、foreachIterator、ListIterator、foreach、Enumeration從實際開發(fā)而言,幾乎都是開發(fā)異步程序,所以首選的肯定是A

15、rrayList子類。3.4、不允許重復(fù)的子接口:Set(重點),20%Set也是一個Collection較為常用的子接口,這個接口的定義如下:public interface Set extends Collection在Collection接口定義了15個方法,但是Set子接口并不像List子接口那樣對Collection接口進(jìn)行了大量的擴充,而是完整的繼承了下來,那么就證明了在Set子接口之中是肯定無法使用get()方法的。那么在Set子接口之中常用的兩個子類:HashSet、TreeSet,下面分別說明。3.4.1、散列存放的子類:HashSet,80%Hash(哈希)屬于一種算法,這

16、種算法的核心意義指的是找空保存算法,所以只要一看見hash第一反應(yīng)就是說沒有順序的保存。范例:觀察Set接口使用packagecn.mldn.demo;importjava.util.HashSet;importjava.util.Set;publicclassTestDemo publicstaticvoidmain(String args)throwsException Set all =newHashSet() ;all.add(Hello) ;all.add(Hello) ;/內(nèi)容重復(fù)了all.add(World) ;System.out.println(all);保存數(shù)據(jù)再輸出之后可

17、以發(fā)現(xiàn),重復(fù)的數(shù)據(jù)沒有了,并且其本身的保存也是沒有任何順序的。3.4.2、排序存放的子類:TreeSet,20%如果現(xiàn)在希望Set集合之中保存的數(shù)據(jù)有順序,那么就通過TreeSet進(jìn)行Set接口的實例化。范例:使用TreeSetpackagecn.mldn.demo;importjava.util.Set;importjava.util.TreeSet;publicclassTestDemo publicstaticvoidmain(String args)throwsException Set all =newTreeSet() ;all.add(D) ;all.add(A) ;/內(nèi)容重復(fù)了

18、all.add(B) ;all.add(B) ;all.add(C) ;System.out.println(all);現(xiàn)在發(fā)現(xiàn)所有保存的數(shù)據(jù)沒有重復(fù)且有序排列。3.4.3、關(guān)于TreeSet排序的說明(重點)通過之前的程序可以發(fā)現(xiàn),使用TreeSet實例化Set接口之中,所有保存的數(shù)據(jù)都是有序的,那么在這種情況下,那么如果說使用的是一個自定義的類呢?那么這個時候如果這個類對象要進(jìn)行排序的話,則這個類必須實現(xiàn)Comparable接口,設(shè)置比較規(guī)則。但是在這種情況下有一點必須注意:一旦使用了Comparable之后,類之中的所有屬性都必須寫進(jìn)排序規(guī)則。范例:自定義類排序packagecn.mld

19、n.demo;importjava.util.Set;importjava.util.TreeSet;classPersonimplementsComparable privateStringname;privateintage;publicPerson(String name,intage) = name ;this.age= age ;OverridepublicString toString() return姓名:+,年齡:+this.age+n;OverridepublicintcompareTo(Person o) if(this.age o.age) return1 ;elseif

20、(this.age o.age) return-1 ;elsereturnpareTo();publicclassTestDemo publicstaticvoidmain(String args)throwsException Set all =newTreeSet() ;all.add(newPerson(張三,20) ;all.add(newPerson(張三,20) ;/全部重復(fù)all.add(newPerson(李四,20) ;/年齡重復(fù)all.add(newPerson(王五,19) ;all.add(newPerson(趙六,21) ;System.out.println(all

21、);TreeSet子類依靠Comparable中compareTo()方法的返回值是否為0來判斷是否為重復(fù)元素。3.4.4、關(guān)于重復(fù)元素的說明那么TreeSet依靠Comparable進(jìn)行重復(fù)元素判斷,那么HashSet可以嗎?發(fā)現(xiàn)以上的程序換為了HashSet之后,該有的重復(fù)還是有,因為從真正的意義上來講,判斷重復(fù)元素依靠的不是Comparable(只有排序的時候才依靠Comparable),所有的重復(fù)元素的判斷依靠于Object類的兩個方法:hash碼:public int hashCode();對象比較:public boolean equals(Object obj)。在進(jìn)行對象比較的

22、過程之中,首先會先使用hashCode()與已保存在集合之中的對象的hashCode()進(jìn)行比較,如果代碼相同,則再使用equals()方法進(jìn)行屬性的依次判斷,如果全部相同,則為相同元素。那么為了保證每一個對象的hashCode()不一樣,需要設(shè)計一組數(shù)學(xué)公式才可以,會嗎?范例:重復(fù)元素packagecn.mldn.demo;importjava.util.HashSet;importjava.util.Set;classPerson privateStringname;privateintage;publicPerson(String name,intage) = name ;this.ag

23、e= age ;OverridepublicString toString() return姓名:+,年齡:+this.age+n;OverridepublicinthashCode() finalintprime = 31;intresult = 1;result = prime * result +age;result = prime * result + (name=null) ? 0 :name.hashCode();returnresult;Overridepublicbooleanequals(Object obj) if(this= obj)returntrue;if(obj =

24、null)returnfalse;if(getClass() != obj.getClass()returnfalse;Person other = (Person) obj;if(age!= other.age)returnfalse;if(name=null) if(!=null)returnfalse;elseif(!name.equals()returnfalse;returntrue;publicclassTestDemo publicstaticvoidmain(String args)throwsException Set all =newHashSet() ;all.add(n

25、ewPerson(張三,20) ;all.add(newPerson(張三,20) ;/全部重復(fù)all.add(newPerson(李四,20) ;/年齡重復(fù)all.add(newPerson(王五,19) ;all.add(newPerson(趙六,21) ;System.out.println(all);至此,Object類之中的全部方法就講解完成了。3.5、集合的輸出操作(重點)在之前所介紹的都屬于單值集合的基本操作,可是對于集合有一個最為重要的問題就是如何進(jìn)行集合內(nèi)容的輸出操作,而這個問題在Java的類集框架之中給出了四種輸出方式:Iterator、ListIterator、Enume

26、ration、foreach。3.5.1、迭代輸出:Iterator(核心),95%Iterator是最為常用的集合輸出接口,在這個接口中一共定義了三個方法,但只有兩個有真正用處:判斷是否有下一個元素:public boolean hasNext();取得下一個元素:public E next()。在Iterator接口之中存在了一個remove()方法,但是這個方法真沒用。而且在之前學(xué)習(xí)的Scanner也是Iterator的子類。但是如何取得Iterator接口的實例化對象呢?這一操作在Collection接口就已經(jīng)明確定義了,因為Collection繼承了一個Iterable接口,在這個接

27、口下定義了一個方法:public Iterator iterator(),取得Iterator接口的實例化對象,但是與之前在IO操作部分學(xué)習(xí)的一樣,OutputStream實現(xiàn)了Closeable和Flushable兩個接口,但是這兩個接口屬于新的接口,和這兩個接口一樣,Iterable接口也是在JDK 1.5的時候出現(xiàn)的,那么基本上也不會去關(guān)心這兩個接口,因為Collection接口中也已經(jīng)明確定義了iterator()方法。范例:使用Iterator輸出集合數(shù)據(jù)packagecn.mldn.demo;importjava.util.ArrayList;importjava.util.Ite

28、rator;importjava.util.List;publicclassTestDemo publicstaticvoidmain(String args)throwsException List all =newArrayList();all.add(Hello);all.add(Hello);/內(nèi)容重復(fù)了all.add(World);Iterator iter = all.iterator();while(iter.hasNext() /判斷是否有下一個元素String str = iter.next() ;System.out.print(str +、);以后只要是見到了集合的輸出操

29、作,永遠(yuǎn)都使用Iterator接口完成。3.5.2、雙向迭代輸出:ListIterator(了解),0.09%Iterator可以完成的是由前向后的單向輸出操作,如果現(xiàn)在希望可以完成由前向后,和由后向前輸出的話,那么就可以利用ListIterator接口完成,此接口是Iterator的子接口,在ListIterator接口主要使用以下兩個擴充方法:判斷是否有前一個元素:public boolean hasPrevious();取出前一個元素:public E previous()。但是如果要想取得ListIterator接口的實例化對象,Collection沒有這樣的方法支持,這個方法在Lis

30、t接口之中存在:public ListIterator listIterator()。范例:執(zhí)行雙向迭代packagecn.mldn.demo;importjava.util.ArrayList;importjava.util.List;importjava.util.ListIterator;publicclassTestDemo publicstaticvoidmain(String args)throwsException List all =newArrayList();all.add(Hello);all.add(Hello);/內(nèi)容重復(fù)了all.add(World);ListIte

31、rator iter = all.listIterator();System.out.print(由前向后輸出:);while(iter.hasNext() /判斷是否有下一個元素String str = iter.next() ;System.out.print(str +、);System.out.print(n由后向前輸出:);while(iter.hasPrevious() String str = iter.previous() ;System.out.print(str +、);但是對于由后向前的輸出操作,在進(jìn)行之前一定要首先發(fā)生由前向后的輸出。由于此輸出接口只有List可以使用,

32、所以在開發(fā)之中幾乎不會出現(xiàn)。3.5.3、廢棄的接口:Enumeration(重點),4.9%Enumeration是一個最早的輸出接口,最早稱為枚舉輸出,在JDK 1.0的時候就已經(jīng)推出了,并且在JDK 1.5的時候?qū)⑵涔δ苓M(jìn)行了擴充,主要就是增加了泛型,在Enumeration接口里面只定義了兩個方法:判斷是否有下一個元素:public boolean hasMoreElements();取得當(dāng)前元素:public E nextElement();不過要想取得Enumeration的實例化對象,不能依靠Collection接口了,只能夠依靠Vector類完成,在Vector子類之中定義了如下

33、一個方法:publicEnumerationelements()。范例:使用Enumeration進(jìn)行輸出packagecn.mldn.demo;importjava.util.Enumeration;importjava.util.Vector;publicclassTestDemo publicstaticvoidmain(String args)throwsException Vector all =newVector();all.add(Hello);all.add(Hello);/內(nèi)容重復(fù)了all.add(World);Enumeration enu = all.elements()

34、;while(enu.hasMoreElements() String str = enu.nextElement();System.out.print(str +、);從開發(fā)而言,首先考慮絕對不是Enumeration,考慮的肯定是Iterator,只有在必須使用的時候才用它。3.5.4、JDK 1.5的支持:foreach(理解),0.01%對于foreach輸出除了可以進(jìn)行數(shù)組內(nèi)容的輸出之外,也可以針對于集合完成輸出。范例:使用foreachpackagecn.mldn.demo;importjava.util.ArrayList;importjava.util.List;publicc

35、lassTestDemo publicstaticvoidmain(String args)throwsException List all =newArrayList();all.add(Hello);all.add(Hello);/內(nèi)容重復(fù)了all.add(World);for(String str : all) System.out.print(str +、);使用foreach并不是一個被廣泛認(rèn)可的操作代碼形式。3.6、偶對象保存:Map接口(重點)偶對象指的是一對對象,即:兩個對象要同時保存。這兩個對象是按照了“key =value”的形式進(jìn)行定義的,即:可以通過key找到對應(yīng)的va

36、lue數(shù)據(jù),就好象電話號碼本一樣,例如,電話號碼本之中保存了如下的信息:key =張三,value = 123456;key =李四,value = 234567;現(xiàn)在如果要想找到張三的電話,那么肯定根據(jù)張三的key,取得對應(yīng)的value,而如果現(xiàn)在要想找王五的電話,由于沒有王五這個key,所以返回的結(jié)果就是null。Map就是實現(xiàn)這樣一種操作的數(shù)據(jù)結(jié)構(gòu),這個接口之中定義的主要操作方法如下。No.方法名稱類型描述1public V put(K key, V value)普通向集合之中保存數(shù)據(jù)2public V get(Object key)普通通過指定的key取得對應(yīng)的value3public

37、 Set keySet()普通將Map中的所有key以Set集合的方式返回4public SetMap.Entry entrySet()普通將Map集合變?yōu)镾et集合在Map接口之中有兩個常用的子類:HashMap、Hashtable。3.6.1、新的子類:HashMap,95%HashMap是Map接口之中使用最多的一個子類,這個子類的定義如下:public class HashMapextends AbstractMapimplementsMap, Cloneable, Serializable下面就直接通過HashMap演示Map接口中各個主要方法的作用。范例:驗證Map方法packag

38、ecn.mldn.demo;importjava.util.HashMap;importjava.util.Map;publicclassTestDemo publicstaticvoidmain(String args)throwsException Map map =newHashMap();map.put(3,張三);map.put(null,無名氏);map.put(3,李四);/ key重復(fù),value會被新內(nèi)容覆蓋map.put(1,王五);map.put(0,趙六);System.out.println(map.get(3);System.out.println(map.get(

39、null);通過這一代碼可以發(fā)現(xiàn),Map和Collection在操作上的不同:Collection接口設(shè)置完的內(nèi)容目的是為了輸出;Map接口設(shè)置完內(nèi)容的目的是為了查找。范例:取得全部的key,全部的key通過Set集合返回packagecn.mldn.demo;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;publicclassTestDemo publicstaticvoidmain(String args)throwsException Map map =ne

40、wHashMap();map.put(3,張三);map.put(null,無名氏);map.put(3,李四);/ key重復(fù),value會被新內(nèi)容覆蓋map.put(1,王五);map.put(0,趙六);Set set = map.keySet() ;/取得全部的keyIterator iter = set.iterator() ;while(iter.hasNext() Integer key = iter.next() ;System.out.println(key + - + map.get(key);3.6.2、舊的子類:Hashtable,5%Hashtable是在JDK 1.

41、0的時候推出的一個數(shù)據(jù)結(jié)構(gòu)類,在JDK 1.2之后,讓Hashtable實現(xiàn)了一個Map接口,所以用戶在使用的時候依然采用子類為接口實例化的方法進(jìn)行,那么只要接口的方法不變,實際上不管使用那一個子類都一樣。packagecn.mldn.demo;importjava.util.Hashtable;importjava.util.Map;publicclassTestDemo publicstaticvoidmain(String args)throwsException Map map =newHashtable();map.put(3,張三);map.put(3,李四);/ key重復(fù),va

42、lue會被新內(nèi)容覆蓋map.put(1,王五);map.put(0,趙六);System.out.println(map.get(3);System.out.println(map.get(10);這個時候在使用Hashtable子類的時候,里面的數(shù)據(jù)不能有null。面試題:請解釋HashMap和Hashtable的區(qū)別?No.區(qū)別HashMapHashtable1推出時間JDK 1.2JDK 1.02性能采用異步處理方式,性能更高采用同步處理方式,性能相對較低3安全性非線程安全線程安全4設(shè)置null允許將key或value設(shè)置為null不允許出現(xiàn)null,否則出現(xiàn)空指向異常3.6.3、關(guān)于M

43、ap集合的輸出問題(核心)對于集合操作,在之前就一直強調(diào):只要是集合的輸出都使用Iterator完成,但是對于現(xiàn)在的Map集合就麻煩了,因為Map接口之中并沒有提供像Collection接口那樣的iterator()方法,所以如何使用Iterator輸出Map集合呢?如果要想真正的去思考Map接口通過Iterator輸出,那么首先需要來觀察一個Map.Entry接口,此接口定義如下:publicstaticinterface Map.Entry很明顯,這是一個在Map接口之中使用static定義的一個內(nèi)部接口。而且通過Map接口的定義也可以發(fā)現(xiàn)此內(nèi)部接口的存在。而在Map.Entry這個內(nèi)部接

44、口之中還存在有以下的兩個常用方法:取得當(dāng)前的key:public K getKey();取得當(dāng)前的value:public V getValue()。下面通過一個圖形來對比一下Collection和Map接口保存的數(shù)據(jù)形式。通過以上的對比可以發(fā)現(xiàn),在Map集合和Collection集合之中保存的最大區(qū)別:Collection直接保存的是要操作對象,而Map集合是將保存的key和value變成了一個Map.Entry對象,通過這個對象包裝了key和value后保存的,所以根據(jù)這一特征,就可以給出Map使用Iterator輸出的操作步驟:使用Map接口中的entrySet()方法,將Map集合變?yōu)?/p>

45、Set集合;取得了Set接口實例之后就可以利用iterator()方法取得Iterator的實例化對象;使用Iterator迭代找到每一個Map.Entry對象,并進(jìn)行key和value的分離。范例:使用Iterator輸出Map集合packagecn.mldn.demo;importjava.util.Hashtable;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;publicclassTestDemo publicstaticvoidmain(String args)throwsException Map

46、 map =newHashtable();map.put(3,張三);map.put(3,李四);/ key重復(fù),value會被新內(nèi)容覆蓋map.put(1,王五);map.put(0,趙六);SetMap.Entry set = map.entrySet();IteratorMap.Entry iter = set.iterator();while(iter.hasNext() Map.Entry me = iter.next();System.out.println(me.getKey() +,+ me.getValue();這種代碼在日后的所有開發(fā)之中一定會出現(xiàn),所以必須會。面試題:現(xiàn)在

47、在一個List集合之中保存了多個String對象,要求將這個List集合變?yōu)镾et集合,而后再將這個Set集合之中的全部數(shù)據(jù)保存在Map集合的value里面,而Map集合的key使用UUID生成,最后將Map中的數(shù)據(jù)進(jìn)行迭代輸出。相關(guān)說明:1、在Collection接口之中存在一個增加一組集合的方法:publicboolean addAll(Collection c);2、UUID是一種算法,在Java中有指定的類,這個類可以根據(jù)時間戳生成一個幾乎不會重復(fù)的字符串;packagecn.mldn.demo;importjava.util.ArrayList;importjava.util.Has

48、hMap;importjava.util.HashSet;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importjava.util.UUID;publicclassTestDemo publicstaticvoidmain(String args)throwsException List list =newArrayList();list.add(Hello);list.add(Hello);list.add(World);Set set =newHashSet()

49、;set.addAll(list);/將List集合加到Set之中Map map =newHashMap();Iterator iter = set.iterator();while(iter.hasNext() map.put(UUID.randomUUID(), iter.next();/數(shù)據(jù)保存到Map集合IteratorMap.Entry iterMap = map.entrySet().iterator();while(iterMap.hasNext() Map.Entry me = iterMap.next();System.out.println(me.getKey() + -

50、+ me.getValue();就是把幾個集合互相折騰了一番。3.6.4、關(guān)于Map中保存key的說明通過程序可以發(fā)現(xiàn),之前的Map集合之中都是使用了系統(tǒng)類作為了Map的key,那么實際上用戶也可以使用自定義的類作為key出現(xiàn),可是如果要想作為key的類必須注意一點:因為key屬于查找操作,所以要想找到符合的key,那么作為key所在的類就必須覆寫Object類之中的兩個方法:hashCode()、equals()。范例:自定義類作為keypackagecn.mldn.demo;importjava.util.HashMap;importjava.util.Map;classPerson pr

51、ivateStringname;publicPerson(String name) = name;OverridepublicString toString() return姓名:+;OverridepublicinthashCode() finalintprime = 31;intresult = 1;result = prime * result + (name=null) ? 0 :name.hashCode();returnresult;Overridepublicbooleanequals(Object obj) if(this= obj)returntrue;if(obj =nul

52、l)returnfalse;if(getClass() != obj.getClass()returnfalse;Person other = (Person) obj;if(name=null) if(!=null)returnfalse;elseif(!name.equals()returnfalse;returntrue;publicclassTestDemo publicstaticvoidmain(String args)throwsException Map map =newHashMap();map.put(newPerson(張三),newString(zs);System.o

53、ut.println(map.get(newPerson(張三);但是這種程序也只是作為學(xué)習(xí)之中的概念出現(xiàn),而在實際的開發(fā)之中,永遠(yuǎn)都是String作為key,因為最方便。3.7、Stack類(理解)Stack是棧,棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),Stack類的定義如下:public class Stack extends Vector可以發(fā)現(xiàn)Stack類屬于Vector的子類,但是使用的時候卻不使用Vector類定義的方法,而使用Stack類自己的方法:入棧操作:public E push(E item);出棧操作:public E pop();范例:觀察棧的基本操作packagecn.mldn

54、.demo;importjava.util.Stack;publicclassTestDemo publicstaticvoidmain(String args)throwsException Stack all =newStack();all.add(A);all.add(B);all.add(C);System.out.println(all.pop();System.out.println(all.pop();System.out.println(all.pop();System.out.println(all.pop();/沒數(shù)據(jù)了,出現(xiàn)EmptyStackException對于棧這一

55、概念在自己編寫的代碼之中使用不多,不過以后的學(xué)習(xí)都會出現(xiàn)棧的概念,例如:在Android開發(fā)之中,多個Activity之間的互相調(diào)用和返回就是利用了棧。3.8、Collections類(了解)Collections是專門提供的一個集合的工具類,并沒有實現(xiàn)Collection接口,但是在這個類之中,有許多的操作方法,可以方便的進(jìn)行集合的操作(根本沒用)。packagecn.mldn.demo;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassTestDemo publicst

56、aticvoidmain(String args)throwsException List all =newArrayList();Collections.addAll(all,A,B,C);System.out.println(all);Collections.reverse(all) ;System.out.println(all);面試題:請解釋Collection和Collections的區(qū)別?Collection是一個接口,用于定義集合操作的標(biāo)準(zhǔn);Collections是一個工具類,可以操作任意的集合對象。3.9、屬性操作類:Properties(理解)屬性一般都是指的是針對于字符串

57、數(shù)據(jù),并且所有的字符串?dāng)?shù)據(jù)都會按照“key = value”的形式保存,屬性操作類主要是針對于屬性文件完成的。Properties類本身是Hashtable的子類:public class Properties extends Hashtable但是在使用方法上操作的并不是由Map接口定義的方法,使用Properties自己的方法:設(shè)置屬性:public Object setProperty(String key, String value);取得屬性:public String getProperty(String key),如果沒有指定的key返回null;取得屬性:public Stri

58、ng getProperty(String key, String defaultValue),如果沒有指定的key,返回默認(rèn)值。范例:觀察屬性的設(shè)置和取得packagecn.mldn.demo;importjava.util.Properties;publicclassTestDemo publicstaticvoidmain(String args)throwsException Properties pros =newProperties();pros.setProperty(BJ,BeiJing);pros.setProperty(SH,上海);System.out.println(p

59、ros.getProperty(BJ);System.out.println(pros.getProperty(TJ);System.out.println(pros.getProperty(TJ,沒有發(fā)現(xiàn));但是使用Properties類最方便的特點是可以直接將這些屬性以O(shè)utputStream的方式或InputStream的方式輸出或讀取:向輸出流中輸出屬性:public void store(OutputStream out, String comments) throws IOException;從輸入流中讀取屬性:public void load(InputStream inStre

60、am) throws IOException。范例:將屬性保存到文件之中,一般保存屬性文件的后綴都是“*.properties”packagecn.mldn.demo;importjava.io.File;importjava.io.FileOutputStream;importjava.util.Properties;publicclassTestDemo publicstaticvoidmain(String args)throwsException Properties pros =newProperties();pros.setProperty(BJ,BeiJing);pros.set

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論