版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Collections集合基礎(chǔ)知識什么是集合通常情況下,把具有相同性質(zhì)的一類東西,匯聚成一個整體,就可稱為集合。和數(shù)組類似,一個集合中可以存放很多元素。數(shù)組存在明顯的缺陷,集合完全彌補了數(shù)組的一些缺點,比數(shù)組更靈活更實用,可大大提高軟件的開發(fā)效率而且不同的集合框架類可適用于不同場合。甚至可以將集合中的某些類型理解為數(shù)組的包裝類。集合使用舉例留言板系統(tǒng)中留言和回復的讀取、傳遞和顯示。當我們需要將一些相同結(jié)構(gòu)的個體整合在一起時,就可以考慮使用集合了 。什么是集合框架集合框架是為表示操作集合而規(guī)定的一種統(tǒng)一的標準的體系結(jié)構(gòu)。任何集合框架都包含三大塊內(nèi)容:對外的接口、接口的實現(xiàn)和對集合運算的算法。接口
2、:即表示集合的抽象數(shù)據(jù)類型。實現(xiàn):也就是集合框架中接口的具體實現(xiàn)。算法:在一個實現(xiàn)了某個集合框架中的接口的對象身上完成某種有用的計算的方法,例如查找、排序等。集合基礎(chǔ)知識集合基礎(chǔ)知識集合基礎(chǔ)知識Collection 接口是存放一組不唯一(允許重復),無序的對象。Set 接口繼承 Collection,但唯一(不允許重復),仍無序。List 接口繼承 Collection,仍允許重復,但有序(以元素插入的次序來放置元素,不會重新排列。)Map接口是一組成對的(鍵值)對象,即所持有的是key-value pairs。Map中不能有重復的key。Key無序,唯一。value不要求有序,允許重復。容器
3、中的元素類型都為Object。從容器取得元素時,必須把它轉(zhuǎn)換成原來的類型。(數(shù)組既可以存放對象,也可以存放基本數(shù)據(jù)元素)Java集合類Set(集):不記錄元素的保存順序,而且不允許有重復元素。所謂不重復,是指兩個對象不滿足a.equals(b)。Set中可以包含null對象,但最多只能有一個null對象。List(列表):記錄元素的保存順序,而且允許有重復元素。數(shù)組數(shù)組區(qū)別于其它的容器類 (1)效率 (2)類型(3)持有基本類型的能力 數(shù)組數(shù)組的簡單實例 實際上我們無論使用哪種數(shù)組,數(shù)組的標識符都只是一個引用,可以作為數(shù)組初始化的一部分隱式的創(chuàng)建這個對象,或用new表達式顯式的來創(chuàng)建。leng
4、th方法表示數(shù)組對象能夠存儲多少元素,“”操作符是訪問數(shù)組對象的唯一一種方式 。數(shù)組基本類型的容器 數(shù)組可以保存對象的引用,也可以直接保存基本類型,而容器類只能保存對象的引用。當然容器中可以使用包裝類,如Integer,Byte,Double等,用來代替基本類型的值。但是相對于基本數(shù)據(jù)類型,包裝類使用起來不是很方便。 數(shù)組 vs Collection通常,程序在運行時才知道具體的條件去創(chuàng)造對象。不到運行時,不知道所需對象的數(shù)量,甚至類型,所以不能希望創(chuàng)建引用來持有每一個對象。因為不可能知道有多少個這樣的對象。Java 提供了多種方式來保存這些對象。數(shù)組(Array),是java內(nèi)置的類型 集合
5、(Java Collections Framework):java的實用類庫提供了一套相當完整的容器類。數(shù)組(回顧)數(shù)組是多個相同類型數(shù)據(jù)的組合,實現(xiàn)對這些數(shù)據(jù)的統(tǒng)一管理數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型對于引用類型數(shù)組,數(shù)組型數(shù)據(jù)是對象(object),數(shù)組中的每個元素相當于該對象的成員變量數(shù)組的長度一旦被聲明就不可變。數(shù)組有l(wèi)ength來指明它的長度。Java對數(shù)組進行越界檢查以確保安全。Arrays類填充數(shù)組 復制數(shù)組 比較數(shù)組 比較數(shù)組元素 binarySearch()的用法 Arrays類(java.util.Arrays)在java.util庫中Arrays類有
6、多個static方法,提供操作數(shù)組的實用功能排序、搜索。五個基本靜態(tài)方法:equals() 比較兩個數(shù)組是否相等。fill()用某值填充某一部分的數(shù)組。sort()對數(shù)組進行排序。binarySearch() 在已經(jīng)排序的數(shù)組中查找元素。toString()數(shù)組內(nèi)容的字符串表示形式。字符串表示形式由數(shù)組的元素列表組成,括在方括號(“ ”)中。相鄰元素用字符 “, ”(逗號加空格)分隔。數(shù)據(jù)結(jié)構(gòu)-堆棧Stack線性數(shù)據(jù)結(jié)構(gòu),遵循后進先出原則。Stack是java用來實現(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查找對象。Hashtable類是Dictionary(抽象類)的子類,使用key尋找value。 Dictionary的方法: int size() / 返回元素個數(shù) boolean is Empty() /是否為空 public void put (Object key,Object value) /放入一對public Object get (Object key) /通過
9、key檢索一個值 public void remove (Object key) /通過key移除一個值 Enumeration keys()/得到鍵的枚舉器 Enumeration elements()/得到值的枚舉器Hashtable類的key是一個特殊值,Hashcode對象的相對唯一整數(shù)。 boolean containsKey(Object key)/檢查是否散列表的鍵Hashtable中,鍵和值都不可以為 null 舉例:使用Math.random()產(chǎn)生1000個0-20的隨機整數(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);容器容器類簡介 Java2容器類類庫的用途是“保存對象”,它分為兩類: Collection:一組獨立的元素,通常這些元素都服從某種規(guī)則。List必須保持元素特定的順序,而Set不能有重復元素。 Map:一組成對的“鍵值對”對象,即其元素是成對的對象 。容器容器的填充 Collections也有一個非常實用的static方法集,其中有一個fill()方法,該方法的作用也是用同一個對象的引用來填充容器,并只對List對象起作用,而對Set或Map不起作用。 容器容器的缺點 (1)我們將對象的引用加入容器時就丟失了類型的信息,也就是說對于放入容器的對象就沒有類型限制了,即便是我們刻意保持容器
12、的類型,別人也可以輕易的對其進行修改。(2)由于丟失了類型信息,容器只能認為它保存的是Object類型的引用。因此在使用容器中的元素之前一定要做類型轉(zhuǎn)換 。迭代器迭代器是一種設(shè)計模式,它是一個對象,它可以遍歷并選擇序列中的對象,而開發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱為“輕量級”對象,因為創(chuàng)建它的代價小。Java中的Iterator功能比較簡單,并且只能單向移動: (1)iterator()方法:要求容器返回一個Iterator。第一次調(diào)用Iterator的next()方法,它將返回序列中的第一個元素; (2)next()方法:獲得序列中的下一個元素; (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) 面向位置的操作包括插入某個元素或者Collection的功能,還包括獲取、除去或更改元素的功能。在 List 中搜索元素可以從列表的頭部或尾部開始,如果找到元素,將報告元素所在的位置 。(2) List 接口不但能以位置序列迭代的遍歷整個列表,而且還能處理集合的子集 。容器的分類法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) 添加入一個元素get(int i) 取出第i個元素size() List的容量iterator() 把List中數(shù)據(jù)集合交給迭代器Iterator接口常用方法hasNext()next()ListList 接口繼承了 Collection 接口以定義一個允許重復項的有序集合。在“集合框架”中有兩種常規(guī)的List 實現(xiàn):ArrayList和LinkedList。前者采用數(shù)組結(jié)構(gòu)適于隨機存取,后者采用鏈表結(jié)構(gòu),適于插入刪除List接口有兩種遍歷方法:通過迭代器iterator;通過get()方法訪問。只有List有g(shù)et(
18、)方法,只有List有兩種遍歷方法。針對接口編程而不是針對實現(xiàn)編程,可隱藏細節(jié),并實現(xiàn)代碼重用List list=new ArrayList();ArrayList list=new ArrayList();ListCollection 接口的iterate()方法返回一個 Iterator。Iterator接口方法能以迭代方式逐個訪問集合中各個元素,并安全的從Collection 中除去適當?shù)脑亍?boolean hasNext(): 判斷是否存在另一個可訪問的元素 Object next(): 返回要訪問的下一個元素 void remove(): 刪除上次訪問返回的對象。所有容器類均未提
19、供相應的遍歷方法,而是把把遍歷交給迭代器完成。迭代器為容器而生,專門實現(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及隊列隊列(queue),遵循“先進先出”的原則。固定在一端輸入數(shù)據(jù)(加隊),另一端輸出數(shù)據(jù)(減隊)。Java中,用LinkedList來實現(xiàn)隊列。它實現(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 接口,而且它不允許集合中存在重復
22、項,每個具體的 Set 實現(xiàn)類依賴添加的對象的 equals()方法來檢查獨一性。Set接口沒有引入新方法,所以Set就是一個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 接口以定義一個不允許重復項的無序集合。在“集合框架”中有兩種常規(guī)的Set實現(xiàn):HashSet和 TreeSet。前者采用哈希表結(jié)構(gòu)適于快速存取,后者采用二叉樹結(jié)構(gòu),排列有序。Set接口只有一種遍歷方法:通過迭代器iterator;Set未提供get()方法。泛型和自動裝箱/拆箱的使用容器的分類法-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是實現(xiàn)List接口的兩個重要實現(xiàn)Set表示的是對象不可重復的集合,也就是會使用equals()方法進行判斷。TreeSet是一種有序的集合,元素會按照升序排列。注意Comparator()的構(gòu)造。first()/獲取排在最低位的一個last()/最后一個(最
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接口是一組成對的鍵值對象,即所持有的是key-value pairs。Map中不能有重復的key。Key無序,唯一。value不要求有序,允許重復。最常見常見的Map實現(xiàn)類:HashMapMap接口常用方法put(Key,Value) 加入鍵值對get (Key) 取出指定鍵對應值si
29、ze() 返回鍵值對個數(shù)Set keySet() 返回所以鍵的集合,可以利用迭代器遍歷Collection values( )返回所以值的集合,可以利用迭代器遍歷Map接口Map接口提供了一組“關(guān)鍵字-值”的集合Map接口的重要實現(xiàn)類有:Hashtable, HashMap, TreeMap, Properties等。其中,Properties是Hashtable的子類(其鍵值只能是String)HashMap允許使用 null 鍵和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。) 應用舉例public class Topic private int id;private String name;private String content;public Topic() super();public Topic(String name, S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學技術(shù)職業(yè)學院《醫(yī)學生物化學》2023-2024學年第一學期期末試卷
- 廣東金融學院《農(nóng)業(yè)技術(shù)經(jīng)濟學》2023-2024學年第一學期期末試卷
- 廣東環(huán)境保護工程職業(yè)學院《中學語文經(jīng)典新詩解讀》2023-2024學年第一學期期末試卷
- 廣東行政職業(yè)學院《護理學基礎(chǔ)實驗(1)》2023-2024學年第一學期期末試卷
- 廣東工貿(mào)職業(yè)技術(shù)學院《大數(shù)據(jù)原理與技術(shù)課程設(shè)計》2023-2024學年第一學期期末試卷
- 廣東東軟學院《儒學與傳統(tǒng)文化》2023-2024學年第一學期期末試卷
- 廣東創(chuàng)新科技職業(yè)學院《軟件工程A》2023-2024學年第一學期期末試卷
- 《口腔護理崗前培訓》課件
- 《流程圖的排版規(guī)則》課件
- 公證書 仲裁文書
- 高中政治統(tǒng)編版選擇性必修二《法律與生活》綜合測試卷(一)(原卷版)
- 帶狀皰疹后神經(jīng)痛的診治課件教案
- 《房產(chǎn)稅法》課件
- 產(chǎn)品質(zhì)量培訓
- 海洋氣象預測研究
- 2024急性心梗護理常規(guī)
- 淺談風電機組偏航制動器故障原因及案例分析
- 機加工車間主任年終總結(jié)
- 細胞生物學練習題庫與參考答案
- 輻射探測器市場發(fā)展前景分析及供需格局研究預測報告
- 退休延期留用崗位協(xié)議書
評論
0/150
提交評論