版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Chater13 集合框架集合框架1 1、集合框架概述、集合框架概述2 2、CollectionCollection接口接口3 List3 List接口接口方法名方法名說說 明明boolean add(Object o)在列表的末尾順序添加元素,起始索引位置從0開始void add(int index,Object o)在指定的索引位置添加元素。索引位置必須介于0和列表中元素個數之間int size()返回列表中的元素個數Object get(int index)返回指定索引位置處的元素。取出的元素是Object類型,使用前需要進行強制類型轉換boolean contains(Object o
2、)判斷列表中是否存在指定元素boolean remove(Object o)從列表中刪除元素Objectremove(int index)從列表中刪除指定位置元素,起始索引位置從0開始具體參看具體參看jdk文檔文檔3.1 ArrayList3.1 ArrayListArrayList list = new ArrayList(); / 創(chuàng)建創(chuàng)建ArrayList集合集合list.add(stu1); / 向集合中添加元素list.add(stu2);list.add(stu3);list.add(stu4);System.out.println(集合的長度: + list.size(); Sy
3、stem.out.println(第2個元素是: + list.get(1); 注意:(1)ArrayList特點:底層使用數組保存元素,增加刪除指定位置的元素時,會導致創(chuàng)建新的數組,效率較低,因此不適合做大量的增刪操作,但是查詢速度較快。(2)用ArrayList時,盡量指定類型(或者泛型),避免安全隱患,如下:ArrayList list = new ArrayList; 3.2 LinkedList3.2 LinkedList針對ArrayList的優(yōu)缺點,LinkedList如下:(1)LinkedList為雙向循環(huán)鏈表機制,每個元素都通過引用的方式來記住它的前一個和后一個元素。插入(
4、刪除)元素時,修改元素間的引用關系。因此LinkedList對增刪操作有很高效率。(2)特有方法如下:方法名方法名說說 明明voidaddFirst(Object o)在列表的首部添加元素voidaddLast(Object o)在列表的末尾添加元素ObjectgetFirst()返回列表中的第一個元素ObjectgetLast()返回列表中的最后一個元素ObjectremoveFirst()刪除并返回列表中的第一個元素ObjectremoveLast()刪除并返回列表中的最后一個元素LinkedList link = new LinkedList; link.add(stu1);link.a
5、dd(stu2);link.add(stu3);link.add(stu4);/取出并打印該集合中的元素System.out.println(link.toString(); /向該集合中指定位置插入元素link.add(3, Student);/向該集合第一個位置插入元素link.addFirst(First); System.out.println(link);/取出該集合中第一個元素System.out.println(link.getFirst(); /移除該集合中指定位置的元素link.remove(3); /移除該集合中第一個元素link.removeFirst(); System
6、.out.println(link);3.3 Iterator3.3 Iterator接口接口Collection和Map接口主要用于存儲元素,Iterator接口主要用于迭代訪問(遍歷)元素,因此稱為迭代器。ArrayList list = new ArrayList(); list.add(data_1); list.add(data_2);list.add(data_3);list.add(data_4);Iterator it = list.iterator();/判斷判斷ArrayList集合中是否存在下一個元素集合中是否存在下一個元素while (it.hasNext() /取出取
7、出ArrayList集合中的元素集合中的元素 Object obj = it.next(); System.out.println(obj);注意:使用Iterator迭代訪問元素時,如果調用集合容器對象的remove方法刪除某個元素,會出現異常。如下:ArrayList list = new ArrayList(); list.add(Jack);list.add(Annie);list.add(Rose);list.add(Tom);Iterator it = list.iterator(); while (it.hasNext() Object obj = it.next(); if (
8、Annie.equals(obj) list.remove(obj); System.out.println(list);解決方法1:如果只是想刪除某學生,則刪除完之后直接break,不要再遍歷ArrayList list = new ArrayList(); list.add(Jack);list.add(Annie);list.add(Rose);list.add(Tom);Iterator it = list.iterator(); while (it.hasNext() Object obj = it.next(); if (Annie.equals(obj) list.remove(
9、obj); break; System.out.println(list);解決方法2:刪除后,仍然想要遍歷,則需要使用迭代器的刪除方法。即調用迭代器對象remove方法刪除元素后導致的迭代次數變換,對于迭代器對象本身可以預知。ArrayList list = new ArrayList(); list.add(Jack);list.add(Annie);list.add(Rose);list.add(Tom);Iterator it = list.iterator(); while (it.hasNext() Object obj = it.next(); if (Annie.equals(
10、obj) it.remove(obj); System.out.println(list);3.4 ListIterator3.4 ListIterator接口接口Iterator接口:迭代方向是正向迭代,即從第一個到最后一個。ListIterator接口:實現反向迭代,從最后一個到第一個。方法:add、hasPrevious、previous、removeArrayList list = new ArrayList();list.add(data_1);list.add(data_2);list.add(data_3);System.out.println(list);/list.size作
11、為參數,說明當前的迭代指針位置,從哪往前遍歷,不包括本索引/也可以用其他整數,比如本例中使用1,注意觀察ListIterator it = list.listIterator(list.size();while (it.hasPrevious() Object obj = it.previous(); System.out.print(obj + ); 3.5 Vector3.5 Vector和和EnumerationEnumerationVector:用法與ArrayList完全相同,Vector是線程安全的,ArrayList是線程不安全的。Enumeration接口:JDK1.2前實現迭
12、代的接口,目前還在用,和Iterator相同方法:hasMoreElements、nextElementVector v = new Vector(); v.add(Jack); v.add(Rose);v.add(Tom);Iterator it = v.iterator();while (it.hasNext() Object o = it.next(); System.out.println(o);Vector v = new Vector(); v.add(Jack); v.add(Rose);v.add(Tom);Enumeration en = v.elements(); whil
13、e (en.hasMoreElements() Object obj = en.nextElement(); System.out.println(obj);4. Set4. Set接口接口Set接口的方法與Collection接口基本一致。與List接口不同:Set接口的元素無序,通過某種規(guī)則保證存入的元素不重復不重復。主要實現類:HashSet和TreeSet(1)HashSet主要通過哈希值來確定元素在集合中的存儲位置,具有較好的存取和查找性能。(哈希值是通過哈希算法對對象的內存地址值進行計算得到的一個整數值,可以理解為一個數字標識。不同對象的哈希值是有可能相同的)(2)TreeSet則
14、是以二叉樹的方式來存儲元素,可以實現對集合中的元素進行排序。4.1 HashSet4.1 HashSetString str1 = new String(aa);String str2 = new String(aa);if (str1=str2) System.out.println(value is not equal);if (str1.hashCode()=str2.hashCode() System.out.println(hashcode is equal); HashSet set = new HashSet();set.add(str1);set.add(str2);set.a
15、dd(bb);set.add(cc);set.add(dd);Iterator iterator = set.iterator();while (iterator.hasNext() String temp = (String)iterator.next();System.out.println(temp);System.out.println(set);注意輸出情況:注意輸出情況:(1 1)和存入順序不一致,)和存入順序不一致,無序的無序的(2 2)沒有重復的)沒有重復的bbbb,元素,元素不重復不重復此外注意此外注意(1 1)基礎數據類型變量和)基礎數據類型變量和字符串變量,如果值相等,字
16、符串變量,如果值相等,則計算出來的哈希值相等。則計算出來的哈希值相等。(2 2)對象即使內部值相等,)對象即使內部值相等,但是哈希值也可能不相等但是哈希值也可能不相等(3 3)不同對象的哈希值可)不同對象的哈希值可能相同能相同4.1 HashSet4.1 HashSet通過add方法向HashSet存入元素調用存儲對象的hashCode方法獲得對象的哈希值根據對象的哈希值計算對象的存儲位置該位置是否有對象存在舍棄該對象是將該對象存入集合調用eauals比較對象是否相等否是否算法過程算法過程參見案例參見案例1010和和11114.2 TreeSet4.2 TreeSet注意:注意:TreeSet
17、TreeSet內部使用的算法是平衡排序二叉樹,使用的是中序遍歷,內部使用的算法是平衡排序二叉樹,使用的是中序遍歷,即首先訪問左子樹,然后遍歷根結點,最后遍歷右子樹1 1、二叉排序樹、二叉排序樹(1)若左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;(2)若右子樹不空,則右子樹上所有結點的值均大于或等于它的根結點的值;(3)左、右子樹也分別為二叉排序樹;(4)沒有鍵值相等的節(jié)點。2 2、平衡二叉樹、平衡二叉樹平衡二叉樹又被稱為AVL樹,具有以下性質:(1)它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1(2)左右兩個子樹都是一棵平衡二叉樹。4.2 TreeSet4.2 TreeSet例如數列13、8、17、17、1、11、15、25,使用平衡二叉樹存儲時,如下圖,同時存儲過程中,去掉重復元素。具體插入順序過于復雜,此處略去。TreeSet ts = new TreeSet(); ts.add(Jack); ts.add(Helena);ts.add(Helena);ts.add(Eve);Iterator it = ts.iterator(); while(it.hasNext() System.out.println(i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國嬰兒床市場前景規(guī)模及發(fā)展趨勢分析報告
- 2024年港口起重機采購與租賃合同3篇
- 2024年塔吊租賃合同及操作培訓服務3篇
- 茂名職業(yè)技術學院《刑法2》2023-2024學年第一學期期末試卷
- 2024年度物業(yè)服務合同履行監(jiān)督與違約責任追究研究3篇
- 2024年標準離婚合同樣本圖片直接下載版B版
- 2024年版測繪服務委托書2篇
- 2024年歌手經紀公司合約3篇
- 2025年蘭州貨運從業(yè)資格證考試試題和答案
- 2025公對公借款合同范本
- 《物流系統規(guī)劃與設計》課程教學大綱
- 護理質控分析整改措施(共5篇)
- 金屬礦山安全教育課件
- 托盤演示教學課件
- 中華農耕文化及現實意義
- DB32T 4353-2022 房屋建筑和市政基礎設施工程檔案資料管理規(guī)程
- DBJ61-T 112-2021 高延性混凝土應用技術規(guī)程-(高清版)
- 2023年高考數學求定義域專題練習(附答案)
- 農產品品牌與營銷課件
- 蘇科版一年級心理健康教育第17節(jié)《生命更美好》教案(定稿)
- 車輛二級維護檢測單參考模板范本
評論
0/150
提交評論