版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章集合類與泛型程序設(shè)計(jì)釉功廓樊遷吹熙旱納略拙忌腔性鴿銻疥葡土禍腆令況塌抗偵興蘇鬼盧惠偵JAVA集合與泛型JAVA集合與泛型8/7/20231第9章集合類與泛型程序設(shè)計(jì)釉功廓樊遷吹熙旱納略拙忌腔性鴿銻疥9.1Java中的集合類結(jié)構(gòu)
Java提供了集合類(Collection)及其API,于是用戶可以通過統(tǒng)一的操作接口,使得從一種數(shù)據(jù)結(jié)構(gòu)到另一種數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換極為方便,簡化了程序員編程時(shí)的負(fù)擔(dān)。任何集合框架包括三部分內(nèi)容:對外的接口接口的實(shí)現(xiàn)對集合運(yùn)算的算法集合API的根是一個(gè)集合接口,存放于java.util包中。Collection接口定義了所有屬于集合的類都應(yīng)該具有的通用方法。真逗癌甚褂定觀掛疚旦砂蛆恕兢謝車冕貨瑯歪帝根旭跟吐證來疥刀洽藤產(chǎn)JAVA集合與泛型JAVA集合與泛型8/7/202329.1Java中的集合類結(jié)構(gòu)Java提供
Java集合框架結(jié)構(gòu)由兩顆接口樹構(gòu)成:第一棵樹根節(jié)點(diǎn)為Collection接口,它定義了所有集合的基本操作,如添加、刪除、遍歷等。它的子接口Set、List等則提供了更加特殊的功能。第二棵樹根節(jié)點(diǎn)為Map接口。與哈希表類似,保持的是鍵值對的集合,可以通過鍵來實(shí)現(xiàn)對值元素的快速訪問。葛疾陵界悟整毋盒烴爭淪縱桓仲賣慕制聞鶴絳芋簍橇躥褲沫刁泌逸映墟或JAVA集合與泛型JAVA集合與泛型8/7/20233Java集合框架結(jié)構(gòu)由兩顆接口樹構(gòu)成:葛疾陵界悟整毋Collection接口聚澳鎮(zhèn)鞏蝗滄釣代德歌灸定盈跑誦睡秦鐵界室履唁癢滿霹菜龐命饅碼劫瑪JAVA集合與泛型JAVA集合與泛型8/7/20234Collection接口聚澳鎮(zhèn)鞏蝗滄釣代德歌灸定盈跑誦睡秦鐵Map接口王籽礬饒肅箕攀過俗崇練去蟲們候敷鴛左曾聞堅(jiān)勿合攏訟磋你轎基潦蝕錯(cuò)JAVA集合與泛型JAVA集合與泛型8/7/20235Map接口王籽礬饒肅箕攀過俗崇練去蟲們候敷鴛左曾聞堅(jiān)勿合攏訟Collection:每個(gè)元素都是單一對象。List以特定順序容納元素。Set中不能有重復(fù)的元素。Map:每個(gè)元素都是一對key-value(鍵值/實(shí)值)對象,且每個(gè)元素中的鍵值都不能與其他元素中的鍵值相同。韓灤府驟栽心賣繳坎堆班全灰蒜辟裔打強(qiáng)犢姨咽里奧睬鞍棒倒易寐羔粱徒JAVA集合與泛型JAVA集合與泛型8/7/20236Collection:韓灤府驟栽心賣繳坎堆班全灰蒜辟裔打強(qiáng)犢集合接口接口描述Collection能使你操作對象數(shù)組,它位于集合框架層次結(jié)構(gòu)的頂層List擴(kuò)展Collection,表示有序的,可包括重復(fù)元素的列表Set擴(kuò)展Collection,表示無序的,無重復(fù)元素的集合(數(shù)學(xué)上的含義)。SortedSet擴(kuò)展Set,對Set中元素進(jìn)行排序爽賀箕滬尖手宏躇錄筍屈豈住央床罷態(tài)鄂懲礎(chǔ)欲鞘墻戒夯汞球蹄魄腔段窄JAVA集合與泛型JAVA集合與泛型8/7/20237集合接口接口描述Collection能使你操作對象數(shù)組,它位9.2Collection接口Collection接口是構(gòu)造集合框架的基礎(chǔ)。它聲明所有集合類都將擁有的核心方法。包含下面幾種類型的方法增加元素,清除元素,判斷元素的存在返回迭代接口,把集合轉(zhuǎn)換成數(shù)組集合的大小雙噎剎妖糞周揩衡雙棚竹逐朗結(jié)宇亞笆翁臉敞練昨淵繼吊顴肢諷盯灘詢綽JAVA集合與泛型JAVA集合與泛型8/7/202389.2Collection接口Collection接口是構(gòu)9.2Collection接口方法名功能說明booleanadd(Objecto)插入單個(gè)對象booleanaddAll(Collectionc)添加另外一個(gè)集合對象c中的所有對象Object[]toArray()以數(shù)組的形式返回內(nèi)容Object[]toArray(Object[]a)以數(shù)組的形式返回內(nèi)容Iteratoriterator()返回一個(gè)實(shí)現(xiàn)了Iterator接口的對象voidclear()清空所有對象booleanremove(Objecto)刪除指定的對象booleanramoveAll(Collectionc)刪除c中所擁有的對象booleanretainAll(Collectionc)保留指定的對象booleancontains(Objecto)檢查是否包含有指定的對象booleancontainsAll(Collectionc)檢查是否包含c中所包含的對象booleanisEmpty()判斷集合是否為空intsize()獲取集合中的對象個(gè)數(shù)例9-1們程量茬銹羚麻腺惶完紊鏡脫升每同曲攫俐鍬撩偵蛔把叼凍驢撥癟網(wǎng)栓合JAVA集合與泛型JAVA集合與泛型8/7/202399.2Collection接口方法名功能說明boolean9.3Set接口Set接口是一種不包含重復(fù)元素的Collection的子接口。Set接口中并沒有引入新方法,它提供的基本方法和Collection接口類似。Set接口派生了一個(gè)SortedSet接口和一個(gè)抽象類AbstractSet。
紙芬歷督幽九彌債沫衍隊(duì)篩蛹姓恨柿此腰牢巢筍吉粥峭載琳管忌束澀第倍JAVA集合與泛型JAVA集合與泛型8/7/2023109.3Set接口Set接口是一種不包含重復(fù)元素的Colle實(shí)現(xiàn)Set接口的類SortedSet接口用來描述有序的元素集合TreeSet實(shí)現(xiàn)了這個(gè)接口,它將放入其中的元素按序存放,要求其中的對象是可排序的。抽象類AbstractSet實(shí)現(xiàn)了部分Collection接口,并有一個(gè)子類HashSet,它以散列方式表示集合內(nèi)容。顏塞屆和笆冷鷹湛刁劈擱脈胡忌憫購帝擦侶蠢森毖燙摘稱顫拳膽熾伺妙撰JAVA集合與泛型JAVA集合與泛型8/7/202311實(shí)現(xiàn)Set接口的類SortedSet接口用來描述有序的元素集HashSet類HashSet擴(kuò)展AbstractSet并且實(shí)現(xiàn)Set接口。它創(chuàng)建了一個(gè)使用哈希表存儲的集合,能快速定位一個(gè)元素,從而可以優(yōu)化查詢的速度,特別是在查找大集合時(shí)HashSet類比較有用。該類集使用散列表進(jìn)行存儲。在散列(hashing)中,一個(gè)關(guān)鍵字的信息內(nèi)容被用來確定唯一的一個(gè)值,稱為散列碼(hashcode)。而散列碼被用來當(dāng)作與關(guān)鍵字相連的數(shù)據(jù)的存儲下標(biāo)。存儲在HashSet中的元素必須正確覆蓋java.lang.Object中定義的hashCode()方法。HashSet的構(gòu)造函數(shù)如下:HashSet():創(chuàng)建一個(gè)空的哈希集。HashSet(Collectionc):創(chuàng)建一個(gè)哈希集,并且將集合c中所有元素添加進(jìn)去。HashSet(intinitialCapacity):創(chuàng)建一個(gè)擁有特定容量的空哈希集。HashSet(intinitialCapacity,floatloadFactor):創(chuàng)建一個(gè)擁有特定容量和加載因子的空哈希集。獺唬望廷陛志岡捍塘舌斧刺燈紀(jì)腰撥些奎空旺亞咆恕斧噬離置百禹涌使鼎JAVA集合與泛型JAVA集合與泛型8/7/202312HashSet類HashSet擴(kuò)展AbstractSet并且loadFactor是0.01.0之間的一個(gè)數(shù),通常默認(rèn)為0.75。加載因子定義了哈希集合充滿什么程度時(shí)就要增加容量。即當(dāng)元素的數(shù)目大于哈希集容量和加載因子之積時(shí),哈希集容量將擴(kuò)展。例:HashSeths=newHashSet();hs.add("A");hs.add("B");hs.add("C");hs.add("D");hs.add("E");hs.add("F");hs.add("A");System.out.println(hs);[D,A,F,C,B,E]從輸出結(jié)果可以看出,元素并沒有按順序進(jìn)行存儲,并且也沒有重復(fù)元素。[例9-2]駛灤汪晶澀陣陛膿唯迭托試蛋臉況殃粥措蹄宰鐘嘛蹦羨訖辱鮮漂撒咀鹵雖JAVA集合與泛型JAVA集合與泛型8/7/202313loadFactor是0.01.0之間的一個(gè)數(shù),通常默認(rèn)為TreeSet類TreeSet為使用樹結(jié)構(gòu)進(jìn)行存儲的Set接口提供了一個(gè)工具對象按升序存儲。訪問和檢索是很快的。在存儲了大量的需要進(jìn)行快速檢索的排序信息的情況下,TreeSet是一個(gè)很好的選擇。脯槍漬議痛建貼縫按鯨壓漱摸硅舒翌跌甲余次嘔骨嘯警孽競瞞胡侖錫姜礎(chǔ)JAVA集合與泛型JAVA集合與泛型8/7/202314TreeSet類TreeSet為使用樹結(jié)構(gòu)進(jìn)行存儲的Set接TreeSet的使用TreeSeths=newTreeSet();hs.add("D");hs.add("E");hs.add("F");hs.add("A");hs.add("B");hs.add("C"); hs.add("A");System.out.println(hs);該程序的輸出如下:[A,B,C,D,E,F]TreeSet按樹存儲其元素,它們被按照自然順序自動(dòng)安排,也不能有重復(fù)元素[例9-3]叫株哨月瞅耪備肥嫂硅孔醬事醇贏凳兜布持孽住焚夸源坷焦衣砷剁醇密滿JAVA集合與泛型JAVA集合與泛型8/7/202315TreeSet的使用TreeSeths=newTre9.4List接口List接口是包含有序元素的一種Collection子接口,其中的元素必須按序存放。元素之間的順序關(guān)系可以由插入的時(shí)間先后決定,也可以由元素值的大小決定。List接口使用類似于數(shù)組下標(biāo)的索引的概念表示元素在List中的位置。用戶能夠使用索引來訪問List中的元素。索引從0開始。為了保持元素的有序的特性,List接口新增加了大量的方法,使之能夠在序列中間根據(jù)具體位置添加和刪除元素。
臼育介冒嫡歇暈編丘耳姻殷礎(chǔ)棍野權(quán)哲滿便熔祥矢勺疏侮乃摸賬掐涌耪稽JAVA集合與泛型JAVA集合與泛型8/7/2023169.4List接口List接口是包含有序元素的一種ColList接口的主要方法
方法名功能說明voidadd(intindex,Objectelement)在指定位置上添加一個(gè)對象booleanaddAll(intindex,Collectionc)將c中的所有對象添加到指定位置ListIteratorlistIterator()返回一個(gè)ListIteratorListIteratorlistIterator(intindex)返回指定的ListIteratorObjectget(intindex)返回指定位置的對象Objectremove(intindex)刪除指定位置的對象Objectset(intindex,objectelement)用元素element取代位置index上的元素,返回被取代的元素intindexOf(objecto)返回第一個(gè)匹配對象的位置intlastIndexOf(objecto)返回最后一個(gè)匹配對象的索引囚默督邪柔秧茄檄煩星聘乘酬池嗜蛔雇詛莫章煞芳懦懊辮堤媽昧笑蹦傅貌JAVA集合與泛型JAVA集合與泛型8/7/202317List接口的主要方法方法名功能說明voidadd(in9.4.1LinkedList類類ArrayList、LinkedList、Vector、Stack等實(shí)現(xiàn)了List接口。
LinkedList類提供了使用雙向鏈表實(shí)現(xiàn)數(shù)據(jù)存儲的方法,可按序號檢索數(shù)據(jù),并能夠進(jìn)行向前或向后遍歷。由于插入數(shù)據(jù)時(shí)只需要記錄元素的前后項(xiàng)即可,所以插入數(shù)度較快,因此適合于在鏈表中間需要頻繁進(jìn)行插入和刪除的操作。LinkedList的構(gòu)造方法:LinkedList();創(chuàng)建一個(gè)空鏈表LinkedList(Collectionc);創(chuàng)建一個(gè)以集合c中元素為初始值的鏈表龍日悸袋吞眨洲達(dá)腥煌譏謝狙筒繡鐘毆抿恨善埂基航嚴(yán)存訃假善悼諷薩叮JAVA集合與泛型JAVA集合與泛型8/7/2023189.4.1LinkedList類類ArrayList、LLinkedlist接口的主要方法
方法名功能說明publicbooleanadd(Objectelement)向鏈表末尾添加一個(gè)新的結(jié)點(diǎn)publicbooleanadd(intindex,Objecto)將對象o添加到鏈表中由index指定位置publicbooleanaddFirst(Objecto)將對象o添加到鏈表的頭部publicbooleanaddLast(Objecto)將對象向o添加到鏈表的末尾publicbooleanclear()刪除鏈表的所有節(jié)點(diǎn),成為空鏈表publicObjectremove(intindex)刪除指定位置上的結(jié)點(diǎn)publicObjectremove(Objecto)刪除首次出現(xiàn)含有o的結(jié)點(diǎn)publicObjectget(intindex)返回鏈表中index位置處的結(jié)點(diǎn)對象例9-4扛偏毗掃核俠察怎毋砌猴低宗茲倉燈汀約灑絢鄲羹樁弧淡裳守栽椽大安搬JAVA集合與泛型JAVA集合與泛型8/7/202319Linkedlist接口的主要方法方法名功能說明publiArrayList類是List接口的一個(gè)可變長數(shù)組的實(shí)現(xiàn),即一個(gè)ArrayList類對象可以動(dòng)態(tài)改變大小。每個(gè)ArrayList類對象都有一個(gè)容量(Capacity),用于存儲元素的數(shù)組的大小。容量可隨著不斷添加新元素而自動(dòng)增加。序列以初始長度創(chuàng)建,當(dāng)長度超過時(shí),集合自動(dòng)變大;當(dāng)刪除對象時(shí),集合自動(dòng)變小。集合中允許存儲null值。ArrayList類的隨機(jī)訪問速度快,但是向表中插入和刪除比較慢。當(dāng)需要插入大量元素時(shí),在插入前可以調(diào)用ensureCapacity方法來增加ArrayList的容量以提高插入效率。9.4.2ArrayList類話悅沛莖噸背詫溺卷汕花紫代鵝攪搓義啟律愁戎榷爛搓累篙毆臉放鶴浦添JAVA集合與泛型JAVA集合與泛型8/7/202320ArrayList類是List接口的一個(gè)可變長數(shù)組的實(shí)現(xiàn),ArrayList常用的構(gòu)造函數(shù)如下:ArrayList():構(gòu)建一個(gè)空的ArrayList對象。ArrayList(Collectionc):構(gòu)建一個(gè)ArrayList對象,并且將集合c中所有元素添加進(jìn)去。ArrayList(intinitialCapacity):構(gòu)建一個(gè)擁有特定容量的空ArrayList對象。ArrayList的很多成員方法與LinkedList相似,兩者的本質(zhì)區(qū)別是一個(gè)使用順序結(jié)構(gòu),另一個(gè)使用鏈表結(jié)構(gòu),因此,它也可以使用LinkedList類提供的方法進(jìn)行列表的操作。例9-59.4.2ArrayList類訴薔謾爪圭鍍?yōu)⒋沙杨澯苑院玑u硬黑粗競閩嘲累誓報(bào)背飽余你韋爹投庭JAVA集合與泛型JAVA集合與泛型8/7/202321ArrayList常用的構(gòu)造函數(shù)如下:9.4.2Arr9.5Iterator接口通常希望依次訪問類集中的元素。到目前為止,除了使用集合對象的get()方法可以實(shí)現(xiàn)對集合中的元素的遍歷外,處理這個(gè)問題的最簡單方法是使用iterator,Iterator是一個(gè)或者實(shí)現(xiàn)Iterator或者實(shí)現(xiàn)ListIterator接口的對象。Iterator可以遍歷類集中的元素,從而獲得或刪除元素。ListIterator擴(kuò)展Iterator,允許雙向遍歷列表,并可以修改。
們免陡鉗硝咕悟唉斯廠泥國泉跳罵暇押榴循今鼎娜究苫輯盜雪念芬撥泡它JAVA集合與泛型JAVA集合與泛型8/7/2023229.5Iterator接口通常希望依次訪問類集中的元素。到Iterator接口的主要方法
方法名功能說明booleanhasNext()判斷是否還有其他元素Objectnext()獲取下一個(gè)元素voidremove()刪除最后一次調(diào)用next方法返回的元素SetkeySet()返回Set類型的接口寄鉛盂猴乙未森滅峻鑒折童陳芬宣柄毖速貧匆誼虱秀札群蘑瑩外繕衷羚濱JAVA集合與泛型JAVA集合與泛型8/7/202323Iterator接口的主要方法方法名功能說明booleanIterator迭代器只能前向循環(huán),如果需要雙向遍歷,則可以使用更高級的ListIterator迭代器,ListIterator接口繼承自Iterator接口。ListIterator迭代器除了有next()方法外,還新增了hasprevious()方法和previous()方法,實(shí)現(xiàn)前向遍歷。ListIterator還可以定位當(dāng)前的索引位置,調(diào)用nextIndex()和previousIndex()就可以實(shí)現(xiàn)。
ListIterator迭代器啊到坦鍵玻蝸現(xiàn)匙栗慕同宋澄刀丟續(xù)墳導(dǎo)慣遞塊軍關(guān)萎壞啥招剪嫁阜膽宣JAVA集合與泛型JAVA集合與泛型8/7/202324Iterator迭代器只能前向循環(huán),如果需要雙向遍歷,則可ListIterator接口的主要方法方法名功能說明voidadd(Objecto)插入新的對象voidset(Objecto)修改最后一次調(diào)用next方法返回的元素voidremove()刪除最后一次調(diào)用next方法返回的元素booleanhasPrevious()判斷前面是否還有元素Objectprevious()獲取前一個(gè)對象intnextIndex()獲取下一個(gè)元素的索引值intpreviousIndex()獲取上一個(gè)元素的索引值妙東賣畫雨帛仲僥臉砸立闡錫汁赫超頑繩彭匿啄氮柏踏匙捶醒攣緯酵寨銥JAVA集合與泛型JAVA集合與泛型8/7/202325ListIterator接口的主要方法方法名功能說明voidIterator使用ArrayListal=newArrayList();Iteratoritr=al.iterator(); while(itr.hasNext()) { Objectelement=itr.next(); System.out.print(element+""); }詳細(xì)例9-6使用Iterator的一般步驟:調(diào)用集合對象的Iterator()方法得到一個(gè)指向集合序列第一個(gè)元素的迭代器;設(shè)置一個(gè)調(diào)用hasNext()方法的循環(huán),序列中是否還有元素。如果集合中還有元素,hasNext()返回true;在循環(huán)中,使用next()方法獲得集合序列中的下一個(gè)元素;如果需要?jiǎng)h除元素,可remove()方法將迭代器所返回的元素刪除。Remove()方法刪除next()方法最后一次從集合中訪問的元素。通寬孵澗橇夏挎軒瘤又象瓊羌德戀懶品揖將靶墜市聘救詹易汪惡彌鉻錫嚷JAVA集合與泛型JAVA集合與泛型8/7/202326Iterator使用ArrayListal=newA9.6Map及HashMap接口
1.Map接口
Map中每項(xiàng)都是成對出現(xiàn)的,它提供了一組鍵值的映射即一個(gè)存儲關(guān)鍵字和值的關(guān)聯(lián)或者說是關(guān)鍵字/值對的對象。存儲的每個(gè)對象都有一個(gè)相應(yīng)的關(guān)鍵字(key),關(guān)鍵字決定了對象在Map中的存儲位置。給定一個(gè)關(guān)鍵字,可以得到它的值。關(guān)鍵字和值都是對象,每一對關(guān)鍵字/值,叫做一項(xiàng)。關(guān)鍵字應(yīng)該是唯一的,但值是可以被重復(fù)的,且每個(gè)key只能映射一個(gè)value。用put(Objectkey,Objectvalue)方法即可將一個(gè)鍵與一個(gè)值對象相關(guān)聯(lián)。用get(Objectkey)可得到與此key對象所對應(yīng)的值對象。有些映射可以接收null關(guān)鍵字和null值。而有的則不行疑錐墊往勒茁刷報(bào)懊智桿礫息煮喪升饋捎菲蒙禍巍焚纂簿鴦客記唉盧勿寄JAVA集合與泛型JAVA集合與泛型8/7/2023279.6Map及HashMap接口1.Map接口Map接口的主要方法
方法名功能說明Objectput(Objectkey,Objectvalue)插入新的對象,并用key作為其鍵字voidputAll(Mapt)將另一個(gè)Map中的所有對象復(fù)制進(jìn)來SetentrySet()返回映射中的關(guān)鍵字-值對的集合SetkeySet()返回映射中所有關(guān)鍵字的集合Collectionvalues()返回映射中所有值的集合Objectremove(Objectkey)刪除指定的對象Objectget(Objectkey)獲取與key相聯(lián)系的對象booleancontainsKey(Objectkey)判斷是否包含指定的鍵值booleancontainsValue(Objectvalue)判斷是否包含指定的對象閱恥卯戮竅闊梆沏紙窘實(shí)寧恨撰力升撮添癥與技男直哨盯巡票鄒藥匡獨(dú)右JAVA集合與泛型JAVA集合與泛型8/7/202328Map接口的主要方法方法名功能說明Objectput(OMap接口的一個(gè)抽象類是AbstractMap。在這個(gè)抽象類中,部分地實(shí)現(xiàn)了Map接口中的成員方法,使得具體的映射類不必實(shí)現(xiàn)Map接口中的每個(gè)成員方法。AstractMap抽象類有三個(gè)子類:TreeMapHashMapWeakHashMap:AstractMap抽象類閘肘鞠在友唇飼尾礙鋅割薩朔默章適瞧舶山輪賴擇勁挖緩齒餅東坤艾祖室JAVA集合與泛型JAVA集合與泛型8/7/202329Map接口的一個(gè)抽象類是AbstractMap。Astrac
(1)TreeMap描述了一個(gè)按鍵值升序排列的映射,它有一些擴(kuò)展的方法,如firstKey(),lastKey()等,還可以從TreeMap中指定一個(gè)范圍以取得其子Map。
(2)HashMap描述的一個(gè)映射中允許存儲空對象,由于鍵必須唯一,所以只能有一個(gè)空鍵值。(3)WeakHashMap是一種改進(jìn)的HashMap,它描述了一個(gè)映射,當(dāng)集合中的某些內(nèi)容不再使用時(shí)需清除掉無用的數(shù)據(jù),并使用垃圾回收機(jī)制進(jìn)行回收。AstractMap抽象類詣建娜埠單薦椅樣癢谷辣濕亦匹墜搓蚊磚翔屹排胚員吟能執(zhí)達(dá)菱扯革遙或JAVA集合與泛型JAVA集合與泛型8/7/202330(1)TreeMap描述了一個(gè)按鍵值升序排列的映射,它HashMap類使用散列表實(shí)現(xiàn)Map接口HashMap通過哈希運(yùn)算可以快速查找一個(gè)鍵,因此在適合于在Map中插入、刪除和定位元素。如果要按照自然順序或者自定義順序遍歷關(guān)鍵字,TreeMap會(huì)更好些。
2.HashMap
糧嬌悔基添袖描存雅褲低官悸抬緞工央習(xí)標(biāo)碾焦藻裸倘謊筒貳它板鎊緣蔚JAVA集合與泛型JAVA集合與泛型8/7/202331HashMap類使用散列表實(shí)現(xiàn)Map接口2.HashMa由于HashMap實(shí)現(xiàn)了Map接口,因此它沒有自己的新方法。HashMap的構(gòu)造方法如下:HashMap():創(chuàng)建一個(gè)空的HashMap集合。HashMap(Mapt):創(chuàng)建一個(gè)哈希集,將t中所有元素添加進(jìn)去。HashMap(intinitialCapacity):創(chuàng)建一個(gè)擁有特定容量的空HashMap集合。HashMap(intinitialCapacity,floatloadFactor):創(chuàng)建一個(gè)擁有特定容量和加載因子的空HashMap。找斷面訂曹堯取豐休穆減索占籽濘脫瘁膛懊靈麥低智博庇暗鎳匹遜瞥挖皮JAVA集合與泛型JAVA集合與泛型8/7/202332由于HashMap實(shí)現(xiàn)了Map接口,因此它沒有自己的新方法
散列表中的容量是指能夠存儲對象的數(shù)量。當(dāng)對象存儲的數(shù)目到達(dá)容量乘以加載因子的值時(shí),容量將會(huì)自動(dòng)地增加到原容量的2倍加1,加1的目的是確保散列表的容量為質(zhì)數(shù)或奇數(shù)。例如:HashMapaMap=newHashMap(151,0.6f);則aMap對象最初的容量為151,當(dāng)存儲對象的數(shù)量達(dá)到91時(shí),容量將會(huì)自動(dòng)增加到303。飲怠顯肉詹留嗆嶼牟坍訛鉀辭暇翟娥諒吳工晃坡粹冠敵獨(dú)獵呢櫻收耘謂婆JAVA集合與泛型JAVA集合與泛型8/7/202333散列表中的容量是指能夠存儲對象的數(shù)量。當(dāng)對象存儲的數(shù)目到達(dá)HashMap類的主要成員方法方法描述Objectput(Objectkey,Objectvalue)用鍵值key存儲對象valuevoidputAll(Mapmap)將map中的所有鍵值/對象傳遞給當(dāng)前的散列表Objectget(Objectkey)返回鍵值key所對應(yīng)的對象remove(Objectkey)刪除key鍵值所對應(yīng)的對象SetKeySet()返回一個(gè)Set對象,其內(nèi)容為所有的鍵值SetentrySet()返回一個(gè)Set對象,其內(nèi)容為所有的鍵值/對象對Collectionvalues()返回一個(gè)Collection對象,其內(nèi)容為散列表中存儲的所有對象ObjectgetKey()返回對象的鍵值ObjectgetValue()返回所對應(yīng)的對象voidsetValue(Objectnew)將對象設(shè)置為new塌賴致掩蝕鈕獄直瑚貶溜歡話孤忙巷澎困沸蟲拖期智頃汞浮幢玉時(shí)偵次帝JAVA集合與泛型JAVA集合與泛型8/7/202334HashMap類的主要成員方法方法描述Objectput(例:HashMaphm=newHashMap //把元素加入映射 hm.put("John",newInteger(96)); hm.put("Tom",newInteger(97)); hm.put("Jane",newInteger(98));例9-7帳攜蟻瓤優(yōu)蒲輔沽鑿籃卷沁嘗虛蠅汀示片戀粕且寺駕汕簡芝屏賺尋拆孫凌JAVA集合與泛型JAVA集合與泛型8/7/202335例:HashMaphm=newHashMap帳攜蟻3.TreeMap類
TreeMap類通過使用樹實(shí)現(xiàn)Map接口。允許快速檢索。應(yīng)該注意的是,不像散列映射,樹映射保證它的元素按照關(guān)鍵字升序排序。下面的TreeMap構(gòu)造函數(shù)定義為:TreeMap()TreeMap(Comparatorcomp)TreeMap(Mapm)TreeMap(SortedMapsm)燒陽默糟洱孫捶絞廄壟垛輛忌還點(diǎn)捂廚惕翔硬止迂石百雄煤殼腮從屁肄鋪JAVA集合與泛型JAVA集合與泛型8/7/2023363.TreeMap類TreeMap類通過使用樹實(shí)現(xiàn)MaTreeMap的使用TreeMaptm=newTreeMap(); //放入元素 tm.put("E",newDouble(3444.44)); tm.put("A",newDouble(3444.34)); tm.put("B",newDouble(124.22)); tm.put("C",newDouble(1338.00));Iterator<String>i=set.iterator(); while(i.hasNext()) { Stringkey=i.next(); System.out.println(key+":"+tm.get(key).doubleValue()); }國筒拋授墓摻旭拾拎裂肝踞奸曬縫澆松俱理撤燭同戒島儀時(shí)弗規(guī)釬溢掌冷JAVA集合與泛型JAVA集合與泛型8/7/202337TreeMap的使用TreeMaptm=newTr
Vector(向量)是Java.util包提供的工具類,是類似數(shù)組的一種順序存儲的數(shù)據(jù)結(jié)構(gòu)。它允許將不同類型的元素存儲在一個(gè)向量中,而且元素的個(gè)數(shù)可變,因此Vector類提供了實(shí)現(xiàn)可增長數(shù)組的功能,以適應(yīng)創(chuàng)建Vector對象后進(jìn)行添加或刪除的操作,使得應(yīng)用程序的操作方式變得更加方便、靈活。9.7Vector類畦俞柞抬淤礦叛蒂杉限桅繹挫督巫熒勉躲眩量羞恢褥料僑慧闊孿嬰前掀季JAVA集合與泛型JAVA集合與泛型8/7/2023389.7Vector類畦俞柞抬淤礦叛蒂杉限桅繹挫督巫熒勉躲Vector類適合在如下情況中使用:需要處理的對象數(shù)目不確定,序列中的元素都是對象或者可以表示為對象。需要將不同類的對象組合成一個(gè)數(shù)據(jù)序列需要在對象序列中頻繁地插入和刪除需要經(jīng)常定位元素或者進(jìn)行其他查詢操作在不同類之間傳遞大量數(shù)據(jù)。勇贈(zèng)渾適哥由未鐘個(gè)寧紫氨掂抨卸別姜勤鉚懈幼拌杯卉唬誅湊甭芥匈貴升JAVA集合與泛型JAVA集合與泛型8/7/202339勇贈(zèng)渾適哥由未鐘個(gè)寧紫氨掂抨卸別姜勤鉚懈幼拌杯卉唬誅湊甭芥匈1.創(chuàng)建Vector類的對象
Vector類有如下4個(gè)構(gòu)造函數(shù):publicVector():創(chuàng)建最多允許存放10個(gè)元素的向量,每次擴(kuò)展向量元素的數(shù)目為原向量元素?cái)?shù)目的一倍。publicVector(intinitialCapacity):創(chuàng)建最多允許存放initialCapacity個(gè)元素的向量,每次擴(kuò)展向量元素的數(shù)目為原向量元素?cái)?shù)目的一倍。
袒筐繳烏淹血渭附窟湯還四哼須梁徘君蚜雷棟蔬晰毫唾瀉檄它疤恰青賽蹲JAVA集合與泛型JAVA集合與泛型8/7/2023401.創(chuàng)建Vector類的對象Vector類有如下4個(gè)構(gòu)
publicVector(intinitialCapacity,intcapacityIncrement):創(chuàng)建最多允許存放initialCapacity個(gè)元素的向量,每次擴(kuò)展向量元素的數(shù)目為capacityIncrement。publicVector(Collectionc):創(chuàng)建最多允許比參數(shù)帶入的集合c的元素?cái)?shù)目多10%的向量,每次擴(kuò)展向量元素的數(shù)目為原向量元素?cái)?shù)目的一倍。踏崔閃暴徹慈毆怠虧秒撼烷駁虹嫉啊閘炳避謗罪宛鱗穴軟咐匡脫祭繞臣誤JAVA集合與泛型JAVA集合與泛型8/7/202341publicVector(intinitialCap
其中,initialCapacity表示剛創(chuàng)建時(shí)Vector序列包含的元素?cái)?shù)目;capacityIncrement表示向Vector序列中追加元素時(shí)每次增加的個(gè)數(shù)。下面是幾個(gè)創(chuàng)建向量對象的例子。VectorvectorObject1=newVector();VectorvectorObject2=newVector(200);VectorvectorObject3=newVector(200,15);在使用Vector時(shí),需要特別注意的是先創(chuàng)建后使用,否則容易造成溢出或者空指針異常柏碌謀莆遠(yuǎn)旗挖疚患鵝帝斤洛貶吊凸袖溯釣坐矽苫癌互蓋刺電浩很伍掉艦JAVA集合與泛型JAVA集合與泛型8/7/202342其中,initialCapacity表示剛創(chuàng)建時(shí)Vect
Vector類的主要成員方法(1)成員方法描述intcapacity()返回當(dāng)前向量所允許存放的元素?cái)?shù)目,通常被稱為向量容量。intsize()返回向量中當(dāng)前的元素?cái)?shù)目。voidcopyInto(ObjectanArray[])將向量中的元素復(fù)制到anArray數(shù)組中。intindexOf(Objectelem)將從前向后搜索對象elem。ObjectelementAt(intindex)這個(gè)成員方法將返回向量下標(biāo)為index對應(yīng)的元素。voidsetElementAt(Objectobj,intindex)將對象obj存放到下標(biāo)為index的位置。voidremoveElementAt(intindex)刪除下標(biāo)為index的對象,后面的元素依次向前移動(dòng)一個(gè)位置。voidinsertElementAt(Objectobj,intindex)在下標(biāo)為index處插入對象obj,原index處以后的元素依次向后移動(dòng)一個(gè)位置。voidaddElement(Objectobj)將對象obj追加在向量的尾部木祝珍矯槐北抓心窿娩蝦觸粱墾抖洋擒箱澈次叉餌臺來涯疆儡付幅妻筋撫JAVA集合與泛型JAVA集合與泛型8/7/202343Vector類的主要成員方法(1)成員方法描述intc
Vector類的主要成員方法(2)成員方法描述booleanremoveElement(Objectobj)從向量中刪除第一次出現(xiàn)的obj對象。Objectclone()實(shí)現(xiàn)向量復(fù)制Objectget(intindex)返回下標(biāo)為index的向量元素。booleanadd(Objecto)將對象o追加在向量的尾部voidadd(intindex,Objectobj)將新元素添加到指定的位置Objectremove(intindex)刪除index位置的對象。如果index非法,拋出ArrayIndexOutOfBoundsExceptio異常StringtoString()將向量元素用字符串形式表示例9-8亦袒劫配矢浴棗凄孽朽海磊果鎢劑芹牌鄒際燴棠族舶高驢權(quán)筑猴邯裁樣瀾JAVA集合與泛型JAVA集合與泛型8/7/202344Vector類的主要成員方法(2)成員方法描述boole9.8Stack類在Java語言中,Stack類是java.util包中專門用來實(shí)現(xiàn)棧的工具類。Stack類繼承自Vector類,因此它是Vector的一個(gè)子類,實(shí)現(xiàn)了一個(gè)后進(jìn)先出的堆棧。Stack類繼承了Vector類的所有方法,還新增了一些方法使得Vector類能夠?qū)崿F(xiàn)堆棧的操作。帶攣臘乖遠(yuǎn)運(yùn)鵝墻律煽聳絡(luò)烏式埠家疽際詢噎宰累乏誓砧泉澳賄洛天螟羅JAVA集合與泛型JAVA集合與泛型8/7/2023459.8Stack類在Java語言中,Stack類是java1、創(chuàng)建Stack類對象publicStack();它建立一個(gè)空的堆棧2、壓棧與出棧操作publicObjectpush(Objectitem):將指定的對象壓入棧publicObjectpop():將棧頂?shù)膶ο髲臈V腥〕?、檢查棧是否為空publicbooleanempty():測試堆棧是否為空,若堆棧中沒有對象元素,則返回true,否則返回false4、查看棧頂端的數(shù)據(jù),但不刪除該數(shù)據(jù)。publicobjectpeek()5、獲取數(shù)據(jù)在堆棧中的位置。最頂端的位置是1,向下依次增加。如果堆棧不含有此數(shù)據(jù),則返回-1。publicsearch(Objectdata)例9-9槳橇憨槐譽(yù)喪串矯野歲魚命澇漠慫蹈弄稍魔真嘲呵裝鄲卻媳等奮粟珍飄蒙JAVA集合與泛型JAVA集合與泛型8/7/2023461、創(chuàng)建Stack類對象例9-9槳橇憨槐譽(yù)喪串矯野歲魚命澇漠泛型是JDK1.5以上版本的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口和泛型方法。它在使用集合時(shí),提供了一種編譯時(shí)類型安全檢查功能,并能減少類型強(qiáng)制轉(zhuǎn)化的麻煩。當(dāng)你從一個(gè)集合中取出一個(gè)元素時(shí),例如使用Iterator接口中的next()方法,其返回值的類型是Object,在使用這個(gè)元素時(shí),需要把返回值轉(zhuǎn)換為元素本身的類型。這種類型轉(zhuǎn)化是不安全的。這種轉(zhuǎn)換是要求開發(fā)者對實(shí)際參數(shù)類型可以預(yù)知的情況下進(jìn)行的。對于強(qiáng)制類型轉(zhuǎn)換錯(cuò)誤的情況,編譯器可能不提示錯(cuò)誤,但在運(yùn)行的時(shí)候可能會(huì)出現(xiàn)異常,這是一個(gè)安全隱患。泛型的引入很好地解決了這一問題9.9泛型程序設(shè)計(jì)丈烷餾嶼腦塑面傣沾職悶棠峙穩(wěn)姿培貌梆塞兒魁僧慌竹葬頹啊秤棠笑刺校JAVA集合與泛型JAVA集合與泛型8/7/202347泛型是JDK1.5以上版本的新特性,泛型的本質(zhì)是參數(shù)化類型泛型類的定義泛型類的定義:classjava_generics<T><>里邊的T的類型可以是任意的,由實(shí)際對象的類型決定。而在使用泛型類時(shí),通過<>內(nèi)的參數(shù)指定參數(shù)類型。楞末啟卒丫爭亨后鋪純殃搪栽愧蘋群菌飯?jiān)懈露所Z郭屈馭館卷屋樁盯謬氛J(rèn)AVA集合與泛型JAVA集合與泛型8/7/202348泛型類的定義泛型類的定義:楞末啟卒丫爭亨后鋪純殃搪栽愧蘋群菌未使用泛化的代碼ArrayLista=newA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GH/T 1448-2024雅安藏茶原料要求
- 2024屆內(nèi)蒙古自治區(qū)錫林郭勒盟高三上學(xué)期期末考試歷史試題(解析版)
- 2024-2025學(xué)年浙江省杭州地區(qū)(含周邊)重點(diǎn)中學(xué)高二上學(xué)期期中考試歷史試題(解析版)
- 廣東省廣州市天河區(qū)2025屆高三上學(xué)期綜合測試(一)英語試卷含答案
- 《美術(shù)基本種類》課件
- 單位管理制度集合大合集【人員管理】十篇
- 單位管理制度匯編大合集【人力資源管理篇】十篇
- 單位管理制度合并匯編人員管理
- 單位管理制度分享匯編【職員管理】十篇
- 高中語文一些重要的文化常識
- 銀行資產(chǎn)保全業(yè)務(wù)管理辦法
- 汽車吊籃使用專項(xiàng)施工方案
- 2024-2025學(xué)年四年級科學(xué)上冊第三單元《運(yùn)動(dòng)和力》測試卷(教科版)
- 教育用地劃撥流程
- 制造業(yè)智能制造工廠布局方案
- 10《吃飯有講究》教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級上冊統(tǒng)編版
- 2024年中考數(shù)學(xué)二輪復(fù)習(xí)二次函數(shù)綜合(含答案)
- 拆除鋁合金門窗及附窗安全協(xié)議書
- 體外診斷試劑-C反應(yīng)蛋白(CRP)測定試劑盒(膠乳增強(qiáng)免疫比濁法)臨床評價(jià)報(bào)告-血清
- 八年級物理上冊(滬粵版2024)新教材解讀課件
- 人教版數(shù)學(xué)四上《大數(shù)的認(rèn)識》說課稿
評論
0/150
提交評論