版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java中集合框架: Collection接口和Map接口,集合框架圖,。集合框架中的核心接口是:List接口、Set接口和Map接口。List接口和Set接口都是繼承了Collection接口的,而Map接口是單獨(dú)存在的。,我們學(xué)了知識(shí)是拿來(lái)應(yīng)用的,那么對(duì)于初學(xué)者來(lái)說(shuō)怎樣才能很好地應(yīng)用集合框架呢!給我感受最深的,也是最重要的,那就是要知道集合框架中各個(gè)接口和實(shí)現(xiàn)類(lèi)的特征和他們的方法。如果知道了他們的特征和方法,那我我們?cè)趹?yīng)用中就能得心應(yīng)手了。好,下面就讓我們一起學(xué)習(xí)集合框架中幾個(gè)常用的接口和實(shí)現(xiàn)類(lèi)的特征:,List:List是一個(gè)接口,它繼承于Collection接口。它定義了一個(gè)允許有重復(fù)
2、項(xiàng)的有序集合。那么,它的特征就是:允許有重復(fù)項(xiàng),有序。 Set:Set是一個(gè)接口,它也是繼承于Collection接口。它不允許集合中存在重復(fù)項(xiàng),無(wú)序。每個(gè)具體的 Set 實(shí)現(xiàn)類(lèi)依賴(lài)添加的對(duì)象的 equals()方法來(lái)檢查獨(dú)一性。,Map:Map也是一個(gè)接口,Map接口不是Collection接口的繼承。Map接口用于維護(hù)鍵/值對(duì)(key/value)。它描述了從不重復(fù)的鍵到值的映射。,重要的實(shí)現(xiàn)類(lèi): 1 ArrayList :ArrayList是一個(gè)類(lèi),他實(shí)現(xiàn)了List接口,它封裝了一個(gè)動(dòng)態(tài)再分配的Object數(shù)組。 它的特點(diǎn)是:有序,可以重復(fù)的數(shù)組。 ArrayList類(lèi)中最常用的方法有:
3、add(),get(),remove(),size()等方法。 例如: List list = new ArrayList();/實(shí)例化一個(gè)對(duì)象 list.add(user);/在list中添加元素,2 LinkedList:LinkedList也是一個(gè)類(lèi),它實(shí)現(xiàn)了List接口,它是一個(gè)雙向鏈表結(jié)構(gòu)的集合。 LinkedList類(lèi)中最常用的方法有:add(),get(),remove(),size(),clear()等方法。這些方法在javaAPI中都有詳細(xì)說(shuō)明。,總結(jié): 1 ArrayList、 LinkedList兩個(gè)類(lèi)都實(shí)現(xiàn)了 List接口 2 ArrayList的特點(diǎn)是有序可以重復(fù)的,
4、LinkedList是一個(gè)雙向鏈表結(jié)構(gòu)的。 3 特點(diǎn)來(lái)選擇:對(duì)這個(gè)集合經(jīng)常進(jìn)行查找操作,那么你最好用ArrayList; 經(jīng)常增加,刪除操作,那么最好用LinkedList來(lái)存放。這些都是根據(jù)他的一個(gè)特點(diǎn)來(lái)選擇應(yīng)用的。,ArrayList = Object + 線(xiàn)性表操作(增刪改查) StringBuilder = char + 操作(增刪改查) ArrayList(1.2以后新的) 是使用變長(zhǎng)數(shù)組算法實(shí)現(xiàn)的 List (線(xiàn)性表方法) Vector(1.0) 是使用變長(zhǎng)數(shù)組算法實(shí)現(xiàn)是 List 矢量 向量 LinkedList 是采用雙向循環(huán)鏈表實(shí)現(xiàn)的List,List 集合的實(shí)現(xiàn) 1 Lin
5、kedList 采用雙向循環(huán)鏈表實(shí)現(xiàn) 2 ArrayList 變長(zhǎng)數(shù)組算法實(shí)現(xiàn) 新的 快 非線(xiàn)程安全 3 Vector 變長(zhǎng)數(shù)組算法實(shí)現(xiàn) 早期提供 慢 線(xiàn)程安全,Map 1 HashMap 新 2 Hashtable 舊 (1.2以前) 散列表概念 1 容量: 散列表中散列數(shù)組大小. 2 散列運(yùn)算: key-散列值(散列數(shù)組下標(biāo))的算法, 如: mm.hashCode()%10-8 3 散列桶: 散列值相同的元素的線(xiàn)性集合 4 加載因子: 就是散列數(shù)組加載率, 一般小于75%性能比較理想 就是:元素?cái)?shù)量/散列數(shù)組大小, 如: 7/10=70% 5 散列查找: 根據(jù)Key計(jì)算散列值, 根據(jù)散列值
6、(下標(biāo)找到散列桶,在散列桶中順序比較Key, 如果一樣, 就返回value 6 散列表中Key不同, Value可以重復(fù),HashMap = Entry(key:value)(散列表)+散列算法(方法)(get/put) ArrayList = Object + 線(xiàn)性算法(方法) LinkedList = 雙向循環(huán)鏈表 + 線(xiàn)性操作(方法) StringBuilder = char + 數(shù)組的操作,HashMap:HashMap是一個(gè)類(lèi),它實(shí)現(xiàn)了Map這個(gè)接口。中文也叫散列表。它的特點(diǎn)就是:鍵值對(duì)的映射關(guān)系。一個(gè)Key對(duì)應(yīng)一個(gè)Value。 例如:我們?cè)谧鲆粋€(gè)簡(jiǎn)單的ATM實(shí)現(xiàn)的時(shí)候,一個(gè)卡號(hào)對(duì)應(yīng)
7、一個(gè)用戶(hù),每一張卡的卡號(hào)是唯一的,而一個(gè)用戶(hù)可以有幾張卡。這種情況,我們就可以用HashMap來(lái)存放數(shù)據(jù)了。,HashMap(關(guān)鍵字:值), 關(guān)鍵字key是唯一不重復(fù)的, 查找表 1) key可以是任何對(duì)象, Value可以任何對(duì)象, 2) key:value 成對(duì)的放置到集合中 3) 重復(fù)的key算一個(gè), 重復(fù)添加是替換操作 4) 根據(jù)key的散列值計(jì)算散列表, 元素按照散列值(不可見(jiàn))排序 5) 默認(rèn)的容量: 16 默認(rèn)加載因子(加載率) 0.75 6) 根據(jù)key檢索查找value值 7) 用于查找場(chǎng)合, 可以提高根據(jù)key查找效率,put(Object key,Object value
8、):根據(jù)給定key值存放value值 get(Object key):根據(jù)給定的key值查找并返回對(duì)應(yīng)的value值若沒(méi)有找到對(duì)應(yīng)的key,返回null clear():清空散列表,containsKey(Object key):查看當(dāng)前散列表中是否包含給定的key值 containsValue(Object value):查看當(dāng)前散列表中是否包含給定的value值 isEmpty():散列表有無(wú)元素 keySet():返回當(dāng)前散列表中所有的key(以 Set集合返回) remove(Object key):根據(jù)key值刪除這一項(xiàng) size():返回當(dāng)前散列表中的元素總數(shù),例如: HashMa
9、p map = new HashMap();/實(shí)例化一個(gè)HashMap對(duì)象 map.put();/在map集合中添加元素,8) HashMap VS Hashtable A HashMap 新, 非線(xiàn)程安全, 不檢查鎖, 快 B Hashtable 舊 (1.2以前) 線(xiàn)程安全, 檢查鎖, 慢一點(diǎn),HashMap中常用的方法有:put(),get(),clear(),containsKey()等方法。 例如: HashMap map = new HashMap();/實(shí)例化一個(gè)HashMap對(duì)象 map.put();/在map集合中添加元素,Java泛型簡(jiǎn)介 1) Java5 以后提出的語(yǔ)法現(xiàn)
10、象, 在編譯期間期檢查的類(lèi)型約束. 運(yùn)行期不檢查泛型! 2) 可以用來(lái)約束類(lèi)中元素的類(lèi)型,Java泛型簡(jiǎn)介 1) Java5 以后提出的語(yǔ)法現(xiàn)象, 在編譯期間期檢查的類(lèi)型約束. 運(yùn)行期不檢查泛型! 2) 可以用來(lái)約束類(lèi)中元素的類(lèi)型,集合的迭代Iterate(遍歷算法)(模仿了數(shù)雞蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 將撲克牌全部發(fā)放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化設(shè)計(jì), 專(zhuān)門(mén)配合while循環(huán)操作,集合的迭代Iterate(遍歷算法)(模仿了數(shù)雞蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 將撲克牌全部發(fā)
11、放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化設(shè)計(jì), 專(zhuān)門(mén)配合while循環(huán)操作,3) Iterator 的實(shí)例可以從集合對(duì)象獲得, 是這個(gè)集合的一個(gè)元素序列 視圖, 默認(rèn)包含一個(gè)操作游標(biāo), 在第一個(gè)元素之前, hasNext() 方法 可以檢查游標(biāo)是否有下一個(gè)元素, next() 方法移動(dòng)游標(biāo)到下一個(gè)元素 并且返回這個(gè)元素引用. 使用while配合這個(gè)兩個(gè)方法, 可以迭代處理 集合的所有元素,4) 迭代時(shí)候可以使用迭代器remove() 方法刪除剛剛迭代的元素( remove() 一定要在next()方法后執(zhí)行,刪除的是next()返回的元素
12、) 在迭代過(guò)程中, 不能使用集合方法(add, remove, set) 更改集合 元素,Collections 集合的工具類(lèi), Arrays 數(shù)組的工具類(lèi) 1) 排序(sort(), 二分查找(binarySearch(), 打亂(shuffle(), 填充(fill()等操作 例如: Collections .sort(); Collection和Collections Collections:是集合的工具類(lèi) Collection:是集合的接口,它有兩個(gè)子接口分別為:List和Set,比較大小 1) Comparable 可以比較的 用于類(lèi)實(shí)現(xiàn), 實(shí)現(xiàn)這個(gè)接口表示: 這個(gè) 類(lèi)的實(shí)例可以比較
13、大小的. 可以進(jìn)行自然排序. CompareTo()返回正數(shù)表示大,返回負(fù)數(shù)表示小,返回0表示相等Comparable的實(shí)現(xiàn)必須與equals() 的結(jié)果一致, 就是相等的對(duì)象比較結(jié)果一定是0! 2) Comparator 比較工具, 用于臨時(shí)定義比較規(guī)則, 不是默認(rèn)比較規(guī)則,Collections的sort方法默認(rèn)使用集合中元素的compareTo()方法比較 * 后進(jìn)行排序,若想改變規(guī)則,可以使用Collections的sort的重載方法, * 傳入一個(gè)比較器,來(lái)使用臨時(shí)比較規(guī)則進(jìn)行排序( 用Comparator比較工具 ),java中的包裝類(lèi) 1) 包裝類(lèi)可以把基本類(lèi)型包裝為對(duì)象類(lèi)型 2
14、) 有八種包裝類(lèi) int Integer long Long byte Byte short Short float Float double Double boolean Boolean char Character,3 包裝類(lèi)提供了 對(duì)應(yīng)數(shù)據(jù)類(lèi)型的工具方法 Integer.toHexString() Integer.toString(int) Integer.toBinaryString() Integer.parseInt(String) 3f-int Integer.parstInt(String, int) 2.718 - 2.718 Double.parseDouble(Strin
15、g str);,應(yīng)該將int這個(gè)基本類(lèi)型轉(zhuǎn)換為一個(gè)對(duì)象類(lèi)型(頂級(jí)父類(lèi)是Object) 使用簡(jiǎn)單類(lèi)型對(duì)應(yīng)的包裝類(lèi)的構(gòu)造方法創(chuàng)建一個(gè)對(duì)應(yīng)的包裝類(lèi)對(duì)象 int a = 10; Integer num = new Integer(a);/將基本類(lèi)型轉(zhuǎn)為對(duì)應(yīng)的包裝類(lèi) ArrayList al = new ArrayList(); al.add(num); 將基本類(lèi)型數(shù)據(jù)轉(zhuǎn)變?yōu)槠浒b類(lèi)的過(guò)程稱(chēng)之為: 裝箱 將包裝類(lèi)的對(duì)象轉(zhuǎn)變?yōu)榛绢?lèi)型稱(chēng)之為:拆箱,自動(dòng)包裝(auto boxing / unboxing)(java5 以后可以): Integer i = 2;/ i=new Integer(2); Obje
16、ct o = 3.5; System.out.println(o instanceof Double); /true int a = i+1;/ a = Value() + 1;,注意 1 包裝類(lèi)是final的類(lèi) 2 包裝類(lèi)對(duì)象是不變的, 與字符串類(lèi)似(不變模式) Integer a = 1; Integer b = 2; a = a+b; /a = new Integer(Value() + Value() 3 包裝類(lèi)覆蓋了 toString equals hashCode compareTo,1) 集合復(fù)制, 默認(rèn)的復(fù)制規(guī)則是淺表(淺層)復(fù)制 A clone(
17、) 方法 B 使用復(fù)制構(gòu)造器! Map map = new HashMap(); Map map2 = new HashMap(map); List list1 = new ArrayList(); List list2 = new LinkedList(list1); 注意:集合Collection不能直接轉(zhuǎn)換為Map,2) 同步化(線(xiàn)程安全的) List list = new ArrayList(); /synchronizedList 可以將非線(xiàn)程安全的list包裝為線(xiàn)程安全的 list = Collections.synchronizedList(list); 轉(zhuǎn)換以后就相當(dāng)于 Vec
18、tor HashMap map = new HashMap(); /synchronizedMap 可以將非線(xiàn)程安全的map包裝為線(xiàn)程安全的 map = Collections.synchronizedMap(map);,3) 數(shù)組與集合的轉(zhuǎn)換 a 數(shù)組轉(zhuǎn)List(只讀的) String names = A,B,C; List list = Arrays.asList(names);/只讀list list = new ArrayList(list);/復(fù)制為全功能List Set set = new HashSet(list);/復(fù)制為Set集合,b 集合轉(zhuǎn)數(shù)組 Object ary1 = list.toArray();/集合轉(zhuǎn)Object String ary2 = (String) list.toArray(new String);/集合轉(zhuǎn)制定類(lèi)型數(shù)組,5) Map的迭代, Map 是 Key:Value 組成的集合 A 對(duì)key:value 進(jìn)行迭代 map.entrySet();返回一個(gè)Set B 對(duì)Key進(jìn)行迭代 map.keySet();返回一個(gè)Set C 對(duì)Value進(jìn)行迭代 map.values();返回Collection,什么
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025 小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)位置旋轉(zhuǎn)后的數(shù)對(duì)變化課件
- 2026春招:海爾集團(tuán)試題及答案
- 2025 小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)互化達(dá)標(biāo)課堂檢測(cè)課件
- 2025 小學(xué)四年級(jí)數(shù)學(xué)上冊(cè)除法的驗(yàn)算方法課件
- 2026春招:歌爾股份試題及答案
- 2026春招:滴滴真題及答案
- 2026春招:廚師面試題及答案
- 外科學(xué)總論多器官功能障礙綜合征的治療措施課件
- 外科學(xué)總論正中神經(jīng)損傷的康復(fù)干預(yù)課件
- 外科學(xué)總論臂叢神經(jīng)損傷的診斷與治療課件
- 創(chuàng)新思維與創(chuàng)業(yè)-西北農(nóng)林科技大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 個(gè)人借款合同個(gè)人借款協(xié)議
- 生物科技股份有限公司GMP質(zhì)量手冊(cè)(完整版)資料
- 兒童行為量表(CBCL)(可打印)
- 地貌學(xué)與第四紀(jì)地質(zhì)學(xué)總結(jié)
- 2023年德語(yǔ)專(zhuān)業(yè)四級(jí)考試真題
- GB/T 36713-2018能源管理體系能源基準(zhǔn)和能源績(jī)效參數(shù)
- 溫度儀表基礎(chǔ)知識(shí)課件
- OnyxWorks使用注意說(shuō)明
- DB53∕T 1034-2021 公路隧道隱蔽工程無(wú)損檢測(cè)技術(shù)規(guī)程
- DB32∕T 2349-2013 楊樹(shù)一元立木材積表
評(píng)論
0/150
提交評(píng)論