版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java中集合框架: Collection接口和Map接口,集合框架圖,。集合框架中的核心接口是:List接口、Set接口和Map接口。List接口和Set接口都是繼承了Collection接口的,而Map接口是單獨(dú)存在的。,我們學(xué)了知識是拿來應(yīng)用的,那么對于初學(xué)者來說怎樣才能很好地應(yīng)用集合框架呢!給我感受最深的,也是最重要的,那就是要知道集合框架中各個接口和實(shí)現(xiàn)類的特征和他們的方法。如果知道了他們的特征和方法,那我我們在應(yīng)用中就能得心應(yīng)手了。好,下面就讓我們一起學(xué)習(xí)集合框架中幾個常用的接口和實(shí)現(xiàn)類的特征:,List:List是一個接口,它繼承于Collection接口。它定義了一個允許有重復(fù)
2、項的有序集合。那么,它的特征就是:允許有重復(fù)項,有序。 Set:Set是一個接口,它也是繼承于Collection接口。它不允許集合中存在重復(fù)項,無序。每個具體的 Set 實(shí)現(xiàn)類依賴添加的對象的 equals()方法來檢查獨(dú)一性。,Map:Map也是一個接口,Map接口不是Collection接口的繼承。Map接口用于維護(hù)鍵/值對(key/value)。它描述了從不重復(fù)的鍵到值的映射。,重要的實(shí)現(xiàn)類: 1 ArrayList :ArrayList是一個類,他實(shí)現(xiàn)了List接口,它封裝了一個動態(tài)再分配的Object數(shù)組。 它的特點(diǎn)是:有序,可以重復(fù)的數(shù)組。 ArrayList類中最常用的方法有:
3、add(),get(),remove(),size()等方法。 例如: List list = new ArrayList();/實(shí)例化一個對象 list.add(user);/在list中添加元素,2 LinkedList:LinkedList也是一個類,它實(shí)現(xiàn)了List接口,它是一個雙向鏈表結(jié)構(gòu)的集合。 LinkedList類中最常用的方法有:add(),get(),remove(),size(),clear()等方法。這些方法在javaAPI中都有詳細(xì)說明。,總結(jié): 1 ArrayList、 LinkedList兩個類都實(shí)現(xiàn)了 List接口 2 ArrayList的特點(diǎn)是有序可以重復(fù)的,
4、LinkedList是一個雙向鏈表結(jié)構(gòu)的。 3 特點(diǎn)來選擇:對這個集合經(jīng)常進(jìn)行查找操作,那么你最好用ArrayList; 經(jīng)常增加,刪除操作,那么最好用LinkedList來存放。這些都是根據(jù)他的一個特點(diǎn)來選擇應(yīng)用的。,ArrayList = Object + 線性表操作(增刪改查) StringBuilder = char + 操作(增刪改查) ArrayList(1.2以后新的) 是使用變長數(shù)組算法實(shí)現(xiàn)的 List (線性表方法) Vector(1.0) 是使用變長數(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 變長數(shù)組算法實(shí)現(xiàn) 新的 快 非線程安全 3 Vector 變長數(shù)組算法實(shí)現(xiàn) 早期提供 慢 線程安全,Map 1 HashMap 新 2 Hashtable 舊 (1.2以前) 散列表概念 1 容量: 散列表中散列數(shù)組大小. 2 散列運(yùn)算: key-散列值(散列數(shù)組下標(biāo))的算法, 如: mm.hashCode()%10-8 3 散列桶: 散列值相同的元素的線性集合 4 加載因子: 就是散列數(shù)組加載率, 一般小于75%性能比較理想 就是:元素數(shù)量/散列數(shù)組大小, 如: 7/10=70% 5 散列查找: 根據(jù)Key計算散列值, 根據(jù)散列值
6、(下標(biāo)找到散列桶,在散列桶中順序比較Key, 如果一樣, 就返回value 6 散列表中Key不同, Value可以重復(fù),HashMap = Entry(key:value)(散列表)+散列算法(方法)(get/put) ArrayList = Object + 線性算法(方法) LinkedList = 雙向循環(huán)鏈表 + 線性操作(方法) StringBuilder = char + 數(shù)組的操作,HashMap:HashMap是一個類,它實(shí)現(xiàn)了Map這個接口。中文也叫散列表。它的特點(diǎn)就是:鍵值對的映射關(guān)系。一個Key對應(yīng)一個Value。 例如:我們在做一個簡單的ATM實(shí)現(xiàn)的時候,一個卡號對應(yīng)
7、一個用戶,每一張卡的卡號是唯一的,而一個用戶可以有幾張卡。這種情況,我們就可以用HashMap來存放數(shù)據(jù)了。,HashMap(關(guān)鍵字:值), 關(guān)鍵字key是唯一不重復(fù)的, 查找表 1) key可以是任何對象, Value可以任何對象, 2) key:value 成對的放置到集合中 3) 重復(fù)的key算一個, 重復(fù)添加是替換操作 4) 根據(jù)key的散列值計算散列表, 元素按照散列值(不可見)排序 5) 默認(rèn)的容量: 16 默認(rèn)加載因子(加載率) 0.75 6) 根據(jù)key檢索查找value值 7) 用于查找場合, 可以提高根據(jù)key查找效率,put(Object key,Object value
8、):根據(jù)給定key值存放value值 get(Object key):根據(jù)給定的key值查找并返回對應(yīng)的value值若沒有找到對應(yīng)的key,返回null clear():清空散列表,containsKey(Object key):查看當(dāng)前散列表中是否包含給定的key值 containsValue(Object value):查看當(dāng)前散列表中是否包含給定的value值 isEmpty():散列表有無元素 keySet():返回當(dāng)前散列表中所有的key(以 Set集合返回) remove(Object key):根據(jù)key值刪除這一項 size():返回當(dāng)前散列表中的元素總數(shù),例如: HashMa
9、p map = new HashMap();/實(shí)例化一個HashMap對象 map.put();/在map集合中添加元素,8) HashMap VS Hashtable A HashMap 新, 非線程安全, 不檢查鎖, 快 B Hashtable 舊 (1.2以前) 線程安全, 檢查鎖, 慢一點(diǎn),HashMap中常用的方法有:put(),get(),clear(),containsKey()等方法。 例如: HashMap map = new HashMap();/實(shí)例化一個HashMap對象 map.put();/在map集合中添加元素,Java泛型簡介 1) Java5 以后提出的語法現(xiàn)
10、象, 在編譯期間期檢查的類型約束. 運(yùn)行期不檢查泛型! 2) 可以用來約束類中元素的類型,Java泛型簡介 1) Java5 以后提出的語法現(xiàn)象, 在編譯期間期檢查的類型約束. 運(yùn)行期不檢查泛型! 2) 可以用來約束類中元素的類型,集合的迭代Iterate(遍歷算法)(模仿了數(shù)雞蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 將撲克牌全部發(fā)放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化設(shè)計, 專門配合while循環(huán)操作,集合的迭代Iterate(遍歷算法)(模仿了數(shù)雞蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 將撲克牌全部發(fā)
11、放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化設(shè)計, 專門配合while循環(huán)操作,3) Iterator 的實(shí)例可以從集合對象獲得, 是這個集合的一個元素序列 視圖, 默認(rèn)包含一個操作游標(biāo), 在第一個元素之前, hasNext() 方法 可以檢查游標(biāo)是否有下一個元素, next() 方法移動游標(biāo)到下一個元素 并且返回這個元素引用. 使用while配合這個兩個方法, 可以迭代處理 集合的所有元素,4) 迭代時候可以使用迭代器remove() 方法刪除剛剛迭代的元素( remove() 一定要在next()方法后執(zhí)行,刪除的是next()返回的元素
12、) 在迭代過程中, 不能使用集合方法(add, remove, set) 更改集合 元素,Collections 集合的工具類, Arrays 數(shù)組的工具類 1) 排序(sort(), 二分查找(binarySearch(), 打亂(shuffle(), 填充(fill()等操作 例如: Collections .sort(); Collection和Collections Collections:是集合的工具類 Collection:是集合的接口,它有兩個子接口分別為:List和Set,比較大小 1) Comparable 可以比較的 用于類實(shí)現(xiàn), 實(shí)現(xiàn)這個接口表示: 這個 類的實(shí)例可以比較
13、大小的. 可以進(jìn)行自然排序. CompareTo()返回正數(shù)表示大,返回負(fù)數(shù)表示小,返回0表示相等Comparable的實(shí)現(xiàn)必須與equals() 的結(jié)果一致, 就是相等的對象比較結(jié)果一定是0! 2) Comparator 比較工具, 用于臨時定義比較規(guī)則, 不是默認(rèn)比較規(guī)則,Collections的sort方法默認(rèn)使用集合中元素的compareTo()方法比較 * 后進(jìn)行排序,若想改變規(guī)則,可以使用Collections的sort的重載方法, * 傳入一個比較器,來使用臨時比較規(guī)則進(jìn)行排序( 用Comparator比較工具 ),java中的包裝類 1) 包裝類可以把基本類型包裝為對象類型 2
14、) 有八種包裝類 int Integer long Long byte Byte short Short float Float double Double boolean Boolean char Character,3 包裝類提供了 對應(yīng)數(shù)據(jù)類型的工具方法 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這個基本類型轉(zhuǎn)換為一個對象類型(頂級父類是Object) 使用簡單類型對應(yīng)的包裝類的構(gòu)造方法創(chuàng)建一個對應(yīng)的包裝類對象 int a = 10; Integer num = new Integer(a);/將基本類型轉(zhuǎn)為對應(yīng)的包裝類 ArrayList al = new ArrayList(); al.add(num); 將基本類型數(shù)據(jù)轉(zhuǎn)變?yōu)槠浒b類的過程稱之為: 裝箱 將包裝類的對象轉(zhuǎn)變?yōu)榛绢愋头Q之為:拆箱,自動包裝(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 包裝類是final的類 2 包裝類對象是不變的, 與字符串類似(不變模式) Integer a = 1; Integer b = 2; a = a+b; /a = new Integer(Value() + Value() 3 包裝類覆蓋了 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) 同步化(線程安全的) List list = new ArrayList(); /synchronizedList 可以將非線程安全的list包裝為線程安全的 list = Collections.synchronizedList(list); 轉(zhuǎn)換以后就相當(dāng)于 Vec
18、tor HashMap map = new HashMap(); /synchronizedMap 可以將非線程安全的map包裝為線程安全的 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)制定類型數(shù)組,5) Map的迭代, Map 是 Key:Value 組成的集合 A 對key:value 進(jìn)行迭代 map.entrySet();返回一個Set B 對Key進(jìn)行迭代 map.keySet();返回一個Set C 對Value進(jìn)行迭代 map.values();返回Collection,什么
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)滑雪教學(xué)合作合同書2024版版B版
- 西安交通大學(xué)《基礎(chǔ)護(hù)理學(xué)基本技能1》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢晴川學(xué)院《心理咨詢倫理》2023-2024學(xué)年第一學(xué)期期末試卷
- 專業(yè)塔吊故障檢修服務(wù)協(xié)議樣本版A版
- 二零二五版建筑垃圾再生利用與建材企業(yè)合作協(xié)議3篇
- 二零二五年度股權(quán)代持與公司治理創(chuàng)新合同范本2篇
- 2024版供貨協(xié)議范本
- 2024年網(wǎng)絡(luò)安全服務(wù)提供商合作協(xié)議 with 服務(wù)內(nèi)容包括攻防演練、安全監(jiān)控
- 二零二五版汽車進(jìn)口運(yùn)輸與知識產(chǎn)權(quán)保護(hù)合同3篇
- 2025年度綠色能源項目采購代理委托服務(wù)協(xié)議3篇
- 鋼結(jié)構(gòu)加工廠考察報告
- 發(fā)電機(jī)檢修作業(yè)指導(dǎo)書
- 薪酬與福利管理實(shí)務(wù)-習(xí)題答案 第五版
- 廢舊物資處置申請表
- GB/T 37234-2018文件鑒定通用規(guī)范
- GB/T 31888-2015中小學(xué)生校服
- 質(zhì)量檢查考核辦法
- 云南省普通初中學(xué)生成長記錄-基本素質(zhì)發(fā)展初一-初三
- 外科醫(yī)師手術(shù)技能評分標(biāo)準(zhǔn)
- 《英語教師職業(yè)技能訓(xùn)練簡明教程》全冊配套優(yōu)質(zhì)教學(xué)課件
- 采購控制程序
評論
0/150
提交評論