版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Collections集合基礎(chǔ)知識(shí)什么是集合通常情況下,把具有相同性質(zhì)的一類東西,匯聚成一個(gè)整體,就可稱為集合。和數(shù)組類似,一個(gè)集合中可以存放很多元素。數(shù)組存在明顯的缺陷,集合完全彌補(bǔ)了數(shù)組的一些缺點(diǎn),比數(shù)組更靈活更實(shí)用,可大大提高軟件的開發(fā)效率而且不同的集合框架類可適用于不同場(chǎng)合。甚至可以將集合中的某些類型理解為數(shù)組的包裝類。集合使用舉例留言板系統(tǒng)中留言和回復(fù)的讀取、傳遞和顯示。當(dāng)我們需要將一些相同結(jié)構(gòu)的個(gè)體整合在一起時(shí),就可以考慮使用集合了 。什么是集合框架集合框架是為表示操作集合而規(guī)定的一種統(tǒng)一的標(biāo)準(zhǔn)的體系結(jié)構(gòu)。任何集合框架都包含三大塊內(nèi)容:對(duì)外的接口、接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法。接口
2、:即表示集合的抽象數(shù)據(jù)類型。實(shí)現(xiàn):也就是集合框架中接口的具體實(shí)現(xiàn)。算法:在一個(gè)實(shí)現(xiàn)了某個(gè)集合框架中的接口的對(duì)象身上完成某種有用的計(jì)算的方法,例如查找、排序等。集合基礎(chǔ)知識(shí)集合基礎(chǔ)知識(shí)集合基礎(chǔ)知識(shí)Collection 接口是存放一組不唯一(允許重復(fù)),無(wú)序的對(duì)象。Set 接口繼承 Collection,但唯一(不允許重復(fù)),仍無(wú)序。List 接口繼承 Collection,仍允許重復(fù),但有序(以元素插入的次序來放置元素,不會(huì)重新排列。)Map接口是一組成對(duì)的(鍵值)對(duì)象,即所持有的是key-value pairs。Map中不能有重復(fù)的key。Key無(wú)序,唯一。value不要求有序,允許重復(fù)。容器
3、中的元素類型都為Object。從容器取得元素時(shí),必須把它轉(zhuǎn)換成原來的類型。(數(shù)組既可以存放對(duì)象,也可以存放基本數(shù)據(jù)元素)Java集合類Set(集):不記錄元素的保存順序,而且不允許有重復(fù)元素。所謂不重復(fù),是指兩個(gè)對(duì)象不滿足a.equals(b)。Set中可以包含null對(duì)象,但最多只能有一個(gè)null對(duì)象。List(列表):記錄元素的保存順序,而且允許有重復(fù)元素。數(shù)組數(shù)組區(qū)別于其它的容器類 (1)效率 (2)類型(3)持有基本類型的能力 數(shù)組數(shù)組的簡(jiǎn)單實(shí)例 實(shí)際上我們無(wú)論使用哪種數(shù)組,數(shù)組的標(biāo)識(shí)符都只是一個(gè)引用,可以作為數(shù)組初始化的一部分隱式的創(chuàng)建這個(gè)對(duì)象,或用new表達(dá)式顯式的來創(chuàng)建。leng
4、th方法表示數(shù)組對(duì)象能夠存儲(chǔ)多少元素,“”操作符是訪問數(shù)組對(duì)象的唯一一種方式 。數(shù)組基本類型的容器 數(shù)組可以保存對(duì)象的引用,也可以直接保存基本類型,而容器類只能保存對(duì)象的引用。當(dāng)然容器中可以使用包裝類,如Integer,Byte,Double等,用來代替基本類型的值。但是相對(duì)于基本數(shù)據(jù)類型,包裝類使用起來不是很方便。 數(shù)組 vs Collection通常,程序在運(yùn)行時(shí)才知道具體的條件去創(chuàng)造對(duì)象。不到運(yùn)行時(shí),不知道所需對(duì)象的數(shù)量,甚至類型,所以不能希望創(chuàng)建引用來持有每一個(gè)對(duì)象。因?yàn)椴豢赡苤烙卸嗌賯€(gè)這樣的對(duì)象。Java 提供了多種方式來保存這些對(duì)象。數(shù)組(Array),是java內(nèi)置的類型 集合
5、(Java Collections Framework):java的實(shí)用類庫(kù)提供了一套相當(dāng)完整的容器類。數(shù)組(回顧)數(shù)組是多個(gè)相同類型數(shù)據(jù)的組合,實(shí)現(xiàn)對(duì)這些數(shù)據(jù)的統(tǒng)一管理數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型對(duì)于引用類型數(shù)組,數(shù)組型數(shù)據(jù)是對(duì)象(object),數(shù)組中的每個(gè)元素相當(dāng)于該對(duì)象的成員變量數(shù)組的長(zhǎng)度一旦被聲明就不可變。數(shù)組有l(wèi)ength來指明它的長(zhǎng)度。Java對(duì)數(shù)組進(jìn)行越界檢查以確保安全。Arrays類填充數(shù)組 復(fù)制數(shù)組 比較數(shù)組 比較數(shù)組元素 binarySearch()的用法 Arrays類(java.util.Arrays)在java.util庫(kù)中Arrays類有
6、多個(gè)static方法,提供操作數(shù)組的實(shí)用功能排序、搜索。五個(gè)基本靜態(tài)方法:equals() 比較兩個(gè)數(shù)組是否相等。fill()用某值填充某一部分的數(shù)組。sort()對(duì)數(shù)組進(jìn)行排序。binarySearch() 在已經(jīng)排序的數(shù)組中查找元素。toString()數(shù)組內(nèi)容的字符串表示形式。字符串表示形式由數(shù)組的元素列表組成,括在方括號(hào)(“ ”)中。相鄰元素用字符 “, ”(逗號(hào)加空格)分隔。數(shù)據(jù)結(jié)構(gòu)-堆棧Stack線性數(shù)據(jù)結(jié)構(gòu),遵循后進(jìn)先出原則。Stack是java用來實(shí)現(xiàn)棧的工具。Stack類是Vector的子類.Stack只能在一端輸入輸出,“壓棧”,“彈?!?。主要方法:public void
7、push (Object item) public Object pop () public boolean empty() /棧是否為空可以使用Vector類的方法: addElement(); elementAt(); import java.util.*;public class TestStack static String months = Jan,Feb,Mar; public static void main(String args)Stack s = new Stack();for(int i = 0; imonths.length; i+) s.push(monthsi+);
8、 System.out.println(Stack = +s);while (!s.empty()System.out.println(s.pop(); Hashtable類Hashtable類沒有序列的概念,通過key查找對(duì)象。Hashtable類是Dictionary(抽象類)的子類,使用key尋找value。 Dictionary的方法: int size() / 返回元素個(gè)數(shù) boolean is Empty() /是否為空 public void put (Object key,Object value) /放入一對(duì)public Object get (Object key) /通過
9、key檢索一個(gè)值 public void remove (Object key) /通過key移除一個(gè)值 Enumeration keys()/得到鍵的枚舉器 Enumeration elements()/得到值的枚舉器Hashtable類的key是一個(gè)特殊值,Hashcode對(duì)象的相對(duì)唯一整數(shù)。 boolean containsKey(Object key)/檢查是否散列表的鍵Hashtable中,鍵和值都不可以為 null 舉例:使用Math.random()產(chǎn)生1000個(gè)0-20的隨機(jī)整數(shù),判斷是否是平均分布的。 import java.util.*;public class TestH
10、ashTable public static void main(String args)Hashtable ht = new Hashtable();ht.put(one,new Integer(1);ht.put(two,new Integer(2);ht.put(three,new Integer(3);Enumeration em = ht.keys();while (em.hasMoreElements()Object key = em.nextElement();Object value = ht.get(key);System.out.println( +key+ = +valu
11、e);容器容器類簡(jiǎn)介 Java2容器類類庫(kù)的用途是“保存對(duì)象”,它分為兩類: Collection:一組獨(dú)立的元素,通常這些元素都服從某種規(guī)則。List必須保持元素特定的順序,而Set不能有重復(fù)元素。 Map:一組成對(duì)的“鍵值對(duì)”對(duì)象,即其元素是成對(duì)的對(duì)象 。容器容器的填充 Collections也有一個(gè)非常實(shí)用的static方法集,其中有一個(gè)fill()方法,該方法的作用也是用同一個(gè)對(duì)象的引用來填充容器,并只對(duì)List對(duì)象起作用,而對(duì)Set或Map不起作用。 容器容器的缺點(diǎn) (1)我們將對(duì)象的引用加入容器時(shí)就丟失了類型的信息,也就是說對(duì)于放入容器的對(duì)象就沒有類型限制了,即便是我們刻意保持容器
12、的類型,別人也可以輕易的對(duì)其進(jìn)行修改。(2)由于丟失了類型信息,容器只能認(rèn)為它保存的是Object類型的引用。因此在使用容器中的元素之前一定要做類型轉(zhuǎn)換 。迭代器迭代器是一種設(shè)計(jì)模式,它是一個(gè)對(duì)象,它可以遍歷并選擇序列中的對(duì)象,而開發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱為“輕量級(jí)”對(duì)象,因?yàn)閯?chuàng)建它的代價(jià)小。Java中的Iterator功能比較簡(jiǎn)單,并且只能單向移動(dòng): (1)iterator()方法:要求容器返回一個(gè)Iterator。第一次調(diào)用Iterator的next()方法,它將返回序列中的第一個(gè)元素; (2)next()方法:獲得序列中的下一個(gè)元素; (3)hasNext()方法
13、:檢查序列中是否還有元素; (4)remove()方法:將迭代器新返回的元素刪除。 容器的分類法Collection 接口 List接口 Set接口 Map接口 容器的分類法Collection 接口 Collection類的方法 boolean add(Object obj) boolean remove(Object obj) int size() boolean isEmpty() boolean contains(Object obj) Iterator iterator() boolean containsAll(Collection c) boolean addAll(Collec
14、tion c) void clear() void removeAll(Collection c) void retainAll(Collection c) 容器的分類法List接口 (1) 面向位置的操作包括插入某個(gè)元素或者Collection的功能,還包括獲取、除去或更改元素的功能。在 List 中搜索元素可以從列表的頭部或尾部開始,如果找到元素,將報(bào)告元素所在的位置 。(2) List 接口不但能以位置序列迭代的遍歷整個(gè)列表,而且還能處理集合的子集 。容器的分類法List接口LinkedList的主要方法 void addFirst(Object obj)void addLast(Obj
15、ect obj)Object getFirst()Object getLast()Object removeFirst()Object removeLast()LinkedList()LinkedList(Collection c) 容器的分類法List接口ArrayList類的主要方法 void ensureCapacity(int minCapacity)void trimToSize() Listpublic class ListTest public static void main(String args)List list=new ArrayList();/LinkedList()
16、; list.add(44444);list.add(“22222);list.add(11111);list.add(22222); list.add(33333);System.out.println(test list:iterator);Iterator it=list.iterator(); while(it.hasNext() String str= it.next(); System.out.println(str);System.out.println(nntest list:size);for(int i=0;ilist.size();i+)System.out.printl
17、n(list.get(i);List接口常用方法add(Object o) 添加入一個(gè)元素get(int i) 取出第i個(gè)元素size() List的容量iterator() 把List中數(shù)據(jù)集合交給迭代器Iterator接口常用方法hasNext()next()ListList 接口繼承了 Collection 接口以定義一個(gè)允許重復(fù)項(xiàng)的有序集合。在“集合框架”中有兩種常規(guī)的List 實(shí)現(xiàn):ArrayList和LinkedList。前者采用數(shù)組結(jié)構(gòu)適于隨機(jī)存取,后者采用鏈表結(jié)構(gòu),適于插入刪除List接口有兩種遍歷方法:通過迭代器iterator;通過get()方法訪問。只有List有g(shù)et(
18、)方法,只有List有兩種遍歷方法。針對(duì)接口編程而不是針對(duì)實(shí)現(xiàn)編程,可隱藏細(xì)節(jié),并實(shí)現(xiàn)代碼重用List list=new ArrayList();ArrayList list=new ArrayList();ListCollection 接口的iterate()方法返回一個(gè) Iterator。Iterator接口方法能以迭代方式逐個(gè)訪問集合中各個(gè)元素,并安全的從Collection 中除去適當(dāng)?shù)脑亍?boolean hasNext(): 判斷是否存在另一個(gè)可訪問的元素 Object next(): 返回要訪問的下一個(gè)元素 void remove(): 刪除上次訪問返回的對(duì)象。所有容器類均未提
19、供相應(yīng)的遍歷方法,而是把把遍歷交給迭代器完成。迭代器為容器而生,專門實(shí)現(xiàn)容器遍歷ArrayList舉例import java.util.*;public class TestArrayList public static void main(String arg) ArrayList h = new ArrayList(); h.add(1st); h.add(2nd); h.add(3rd); h.add(new Integer(6); h.add(2nd);/ repeat?. print(h); public static void print(List s) System.out.pr
20、intln(s); LinkedList及隊(duì)列隊(duì)列(queue),遵循“先進(jìn)先出”的原則。固定在一端輸入數(shù)據(jù)(加隊(duì)),另一端輸出數(shù)據(jù)(減隊(duì))。Java中,用LinkedList來實(shí)現(xiàn)隊(duì)列。它實(shí)現(xiàn)了list接口,也是一種線性結(jié)構(gòu)。LinkedList提供了序列的頭尾操作。主要方法:public void addLast (Object item) public Object removeFirst () import java.util.*;public class TestHashTable public static void main(String args)Queue q = new Q
21、ueue();for(int i = 0; i5; i+) q.enqueue( +i);while (!q.isEmpty()System.out.println(q.dequeue(); class Queue extends LinkedListvoid enqueue(Object obj) addLast(obj); Object dequeue() return removeFirst(); public boolean isEmpty() return super.isEmpty(); 容器的分類法Set接口Set 接口繼承 Collection 接口,而且它不允許集合中存在重復(fù)
22、項(xiàng),每個(gè)具體的 Set 實(shí)現(xiàn)類依賴添加的對(duì)象的 equals()方法來檢查獨(dú)一性。Set接口沒有引入新方法,所以Set就是一個(gè)Collection,只不過其行為不同 。容器的分類法Set接口SortedSet類的主要方法 Comparator comparator()Object first()Object last()SortedSet subSet(Object beginElement, Object endElement)SortedSet headSet(Object endElement)SortedSet tailSet(Object beginElement)Setpublic
23、 class SetTest public static void main(String args) Set s=new HashSet(); s.add(11111); s.add(44444); s.add(22222); s.add(11111); System.out.println(test set:size()+s.size(); System.out.println(test set:iterator); Iterator it=s.iterator(); while(it.hasNext() String str=it.next(); System.out.println(s
24、tr); Set 接口繼承了 Collection 接口以定義一個(gè)不允許重復(fù)項(xiàng)的無(wú)序集合。在“集合框架”中有兩種常規(guī)的Set實(shí)現(xiàn):HashSet和 TreeSet。前者采用哈希表結(jié)構(gòu)適于快速存取,后者采用二叉樹結(jié)構(gòu),排列有序。Set接口只有一種遍歷方法:通過迭代器iterator;Set未提供get()方法。泛型和自動(dòng)裝箱/拆箱的使用容器的分類法-Map接口Map接口的主要方法 Object put(Object key, Object value)Object remove(Object key)void putAll(Map t)void clear() Object get(Object
25、 key)boolean containsKey(Object key)boolean containsValue(Object value)int size()boolean isEmpty() Set keySet()Collection values()Set接口Set接口是Collection的子接口HashSet, TreeSet是實(shí)現(xiàn)List接口的兩個(gè)重要實(shí)現(xiàn)Set表示的是對(duì)象不可重復(fù)的集合,也就是會(huì)使用equals()方法進(jìn)行判斷。TreeSet是一種有序的集合,元素會(huì)按照升序排列。注意Comparator()的構(gòu)造。first()/獲取排在最低位的一個(gè)last()/最后一個(gè)(最
26、大)元素。Set 接口及HashSet類(例子)import java.util.*;public class TestHashSet public static void main(String arg) HashSet h = new HashSet(); h.add(1st); h.add(2nd); h.add(3rd); h.add(new Integer(6); h.add(2nd);/ repeat?. print(h); public static void print(Set s) System.out.println(s); / use toString(). Mappub
27、lic class MapTest public static void main(String args) Map m=new HashMap();m.put(cn, china);m.put(jp, japan);m.put(hk,hongkong);m.put(au, usa); System.out.println(m.get(au);System.out.println(m.size()=+m.size(); Set k=m.keySet();Iterator it=k.iterator();while(it.hasNext()String key= (String)it.next(
28、);System.out.println(key);Collection v=m.values();Iterator it2=v.iterator();while(it2.hasNext()String value= (String)it2.next();System.out.println(value);Map接口是一組成對(duì)的鍵值對(duì)象,即所持有的是key-value pairs。Map中不能有重復(fù)的key。Key無(wú)序,唯一。value不要求有序,允許重復(fù)。最常見常見的Map實(shí)現(xiàn)類:HashMapMap接口常用方法put(Key,Value) 加入鍵值對(duì)get (Key) 取出指定鍵對(duì)應(yīng)值si
29、ze() 返回鍵值對(duì)個(gè)數(shù)Set keySet() 返回所以鍵的集合,可以利用迭代器遍歷Collection values( )返回所以值的集合,可以利用迭代器遍歷Map接口Map接口提供了一組“關(guān)鍵字-值”的集合Map接口的重要實(shí)現(xiàn)類有:Hashtable, HashMap, TreeMap, Properties等。其中,Properties是Hashtable的子類(其鍵值只能是String)HashMap允許使用 null 鍵和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。) 應(yīng)用舉例public class Topic private int id;private String name;private String content;public Topic() super();public Topic(String name, S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 脫靴器市場(chǎng)分析及投資價(jià)值研究報(bào)告
- 廢物的運(yùn)輸和貯藏行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 農(nóng)業(yè)作物蟲害生物防治行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 不銹鋼冰塊產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 手動(dòng)磨利器具產(chǎn)品供應(yīng)鏈分析
- 醫(yī)療器械物流行業(yè)營(yíng)銷策略方案
- 電子蜂鳴器市場(chǎng)分析及投資價(jià)值研究報(bào)告
- 竹簾市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告
- 底褲服裝產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 老繭銼刀市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告
- 北師大版數(shù)學(xué)九年級(jí)上冊(cè)課程綱要
- 《化工和危險(xiǎn)化學(xué)品生產(chǎn)經(jīng)營(yíng)單位重大生產(chǎn)安全事故隱患判定標(biāo)準(zhǔn)(試行)》解讀課件
- 中華民族發(fā)展史智慧樹知到期末考試答案2024年
- 《新聞采訪與寫作》筆記
- 初中語(yǔ)文朗讀教學(xué)設(shè)計(jì)案例分析
- 物資、百貨、五金采購(gòu) 投標(biāo)方案(技術(shù)方案)
- MOOC 電工技術(shù)與實(shí)訓(xùn)-深圳職業(yè)技術(shù)學(xué)院 中國(guó)大學(xué)慕課答案
- 2024年云南省大數(shù)據(jù)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 外國(guó)新聞傳播史 課件 第十四章 日本的新聞傳播事業(yè)
- 《外科護(hù)理》課件-13.3.1食管癌病人的護(hù)理
- 《養(yǎng)老護(hù)理員》-課件:自然災(zāi)害的應(yīng)對(duì)處理知識(shí)
評(píng)論
0/150
提交評(píng)論