




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、7.12. 集合集合對象:用于管理其他若干對象的對象數(shù)組:長度不可變List: 有順序的,元素可以重復遍歷:for 迭代排序:Comparable Comparator Collections.sort(ArrayList:底層用數(shù)組實現(xiàn)的List特點:查詢效率高,增刪效率低輕量級線程不安全LinkedList:底層用雙向循環(huán)鏈表實現(xiàn)的List特點:查詢效率低,增刪效率高Vector: 底層用數(shù)組實現(xiàn)List接口的另一個類特點:重量級,占據(jù)更多的系統(tǒng)開銷線程安全Set:無順序的,元素不可重復(值不相同遍歷:迭代排序:SortedSetHashSet:采用哈希算法來實現(xiàn)Set接口唯一性保證:重復
2、對象equals方法返回為true重復對象hashCode方法返回相同的整數(shù)不同對象哈希碼盡量保證不同(提高效率SortedSet:對一個Set排序TreeSet:在元素添加的同時,進行排序。也要給出排序規(guī)則唯一性保證:根據(jù)排序規(guī)則,compareTo方法返回為0,就可以認定兩個對象中有一個是重復對象。Map:元素是鍵值對 key:唯一,不可重復 value:可重復遍歷:先迭代遍歷key的集合,再根據(jù)key得到valueHashMap:輕量級線程不安全允許key或者value是nullHashtable:重量級線程安全不允許key或者value是nullProperties:Hashtable
3、的子類,key和value都是StringSortedMap:元素自動對key排序TreeMap:集合是指一個對象可以容納了多個對象(不是引用,這個集合對象主要用來管理維護一系列相似的對象。Collection|Set List Map| |SortedSet SortedMap1 Set: 集合類中不允許有重復對象;2 SortedSet: 和Set接口同,但元素按升序排列;3 List: 元素加載和移出時按照順序,可以保存重復對象。4 Map: (key-value對存儲了唯一關鍵字辨識和對應的值。5 SortedMap: 和Map類同,但對象按他們關鍵字的升序排列。Collection|
4、HashSet LinkedList Hashtable(Set Vector, ArrayList Hashmap(List (Map| |TreeSet TreeMap(SortedSet (SortedMap Collection接口的方法:add(Object oaddAll(Collection ccontains(Object ocontainsAll(Collection cremove(Object oremoveAll(Collection cclear(equals(Object oisEmpty(iterator(size(toArray(toArray(Object o
5、1.ArrayList: 元素單個,效率高,多用于查詢2.Vector: 元素單個,線程安全,多用于查詢3.LinkedList:元素單個,多用于插入和刪除4.HashMap: 元素成對,元素可為空5.HashTable: 元素成對,線程安全,元素不可為空ArrayList底層是Object數(shù)組,所以ArrayList具有數(shù)組的查詢速度快的優(yōu)點以及增刪速度慢的缺點。而在LinkedList的底層是一種雙向循環(huán)鏈表。在此鏈表上每一個數(shù)據(jù)節(jié)點都由三部分組成:前指針(指向前面的節(jié)點的位置,數(shù)據(jù),后指針(指向后面的節(jié)點的位置。最后一個節(jié)點的后指針指向第一個節(jié)點的前指針,形成一個循環(huán)。雙向循環(huán)鏈表的查詢
6、效率低但是增刪效率高。ArrayList和LinkedList在用法上沒有區(qū)別,但是在功能上還是有區(qū)別的。LinkedList經(jīng)常用在增刪操作較多而查詢操作很少的情況下:隊列和堆棧。隊列:先進先出的數(shù)據(jù)結構。棧:后進先出的數(shù)據(jù)結構。注意:使用棧的時候一定不能提供方法讓不是最后一個元素的元素獲得出棧的機會。Vector(與ArrayList相似,區(qū)別是Vector是重量級的組件,使用使消耗的資源比較多。結論:在考慮并發(fā)的情況下用Vector(保證線程的安全。在不考慮并發(fā)的情況下用ArrayList(不能保證線程的安全。面試經(jīng)驗(知識點:對于堆棧和隊列只能用push類和get類。Stack類以后不
7、要輕易使用。實現(xiàn)棧一定要用LinkedList。(在JAVA1.5中,collection有queue來實現(xiàn)隊列。Set-HashSet實現(xiàn)類:遍歷一個Set的方法只有一個:迭代器(interator。HashSet中元素是無序的(這個無序指的是數(shù)據(jù)的添加順序和后來的排列順序不同,而且元素不可重復。在Object中除了有finalize(,toString(,equals(,還有hashCode(。HashSet底層用的也是數(shù)組。當向數(shù)組中利用add(Object o添加對象的時候,系統(tǒng)先找對象的hashCode:int hc=o.hashCode(; 返回的hashCode為整數(shù)值。Int
8、I=hc%n;(n為數(shù)組的長度,取得余數(shù)后,利用余數(shù)向數(shù)組中相應的位置添加數(shù)據(jù),以n 為6為例,如果I=0則放在數(shù)組a0位置,如果I=1,則放在數(shù)組a1位置。如果equals(返回的值為true,則說明數(shù)據(jù)重復。如果equals(返回的值為false,則再找其他的位置進行比較。這樣的機制就導致兩個相同的對象有可能重復地添加到數(shù)組中,因為他們的hashCode不同。如果我們能夠使兩個相同的對象具有相同hashcode,才能在equals(返回為真。在實例中,定義student對象時覆蓋它的hashcode。因為String類是自動覆蓋的,所以當比較String類的對象的時候,就不會出現(xiàn)有兩個相同
9、的string對象的情況?,F(xiàn)在,在大部分的JDK中,都已經(jīng)要求覆蓋了hashCode。結論:如將自定義類用hashSet來添加對象,一定要覆蓋hashcode(和equals(,覆蓋的原則是保證當兩個對象hashcode返回相同的整數(shù),而且equals(返回值為True。如果偷懶,沒有設定equals(,就會造成返回hashCode雖然結果相同,但在程序執(zhí)行的過程中會多次地調(diào)用equals(,從而影響程序執(zhí)行的效率。我們要保證相同對象的返回的hashCode一定相同,也要保證不相同的對象的hashCode盡可能不同(因為數(shù)組的邊界性,hashCode還是可能相同的。例子:public int
10、hashCode(return name.hashcode(+age;這個例子保證了相同姓名和年齡的記錄返回的hashCode是相同的。使用hashSet的優(yōu)點:hashSet的底層是數(shù)組,其查詢效率非常高。而且在增加和刪除的時候由于運用的hashCode 的比較開確定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因為hashSet 查詢和刪除和增加元素的效率都非常高。但是hashSet增刪的高效率是通過花費大量的空間換來的:因為空間越大,取余數(shù)相同的情況就越小。HashSet這種算法會建立許多無用的空間。使用hashSet類時要注意,如果發(fā)生沖突,就會出現(xiàn)遍歷整個數(shù)組的情況,這樣就
11、使得效率非常的低。Collections類(工具類全是static 方法Public static int binarySearch(List list,Object keyPublic static void Sort(List list,Comparator comPublic static void sort(List list方法一:Comparator接口Int compare(Object a,Object bBoolean equals(Object o例子:public class Test public static void main(String arg ArrayLis
12、t al = new ArrayList(;Person p1 = new Person(dudi;Person p2 = new Person(cony;Person p3 = new Person(aihao;al.add(p1;al.add(p2;al.add(p3;Collections.sort(al,p1;for(Iterator it = al.iterator(;it.hasNext(;Person p = (Personit.next(;public String name;public Person(String = name;public in
13、t compare(Object a,Object bif(a instanceof Person&b instanceof PersonPerson pa = (Persona;Person pb = (Personb;return 0;public boolean equals(Object areturn true;方法二Public int compareTo(Object oPublic int compareTo(Object oComparable c1=(Comparablethis;Comparable c2=(Comparableo;.Main 方法中Collections
14、.sort( list ;*注意:程序員和類庫之間是平等的關系,而不是上下級關系,以前的類可以是通過接口調(diào)用后來的類。集合的最大缺點是無法進行類型判定(這個缺點在JAVA1.5中已經(jīng)解決,這樣就可能出現(xiàn)因為類型不同而出現(xiàn)類型錯誤。 解決的方法是添加類型的判斷。 7.13. 反射 用于工具,架構,動態(tài)開發(fā)等開發(fā)工程 三種得到類對象的途徑: Class.forName(“name” /輸入全類名 object.getClass( /得到該對象的類對象 object.class 無參構造一個對象 newInstance( 有參的構造一個對象 Constructor con=c.getConstruc
15、tor(String.class Object o=con.newInstance(“l(fā)iucy”; 調(diào)用對象方法 Class newClass=Student.class; /得到一個類對象 Object o = newClass.newInstance(; /產(chǎn)生對象 Method newMethod = newClass.getDeclaredMethod(study;/得到這個類的方法類 newMethod.invoke(o;/調(diào)用方法,需要提供是哪個對象調(diào)用和參數(shù) 1 確定一個對象的類; 2 獲得一個類的修改符、變量、方法、構器函數(shù)、和父類的相類信息; 3 找出哪些常量和方法是從一個
16、接口聲明的; 4 創(chuàng)建一個在運行時才知道名稱的類; 5 調(diào)用對象的方法; ArrayList 和 Vector 的區(qū)別。 1)ArrayList 是 List 接口的一個可變長數(shù)組實現(xiàn)。實現(xiàn)了所有 List 接口的操作,并允許存 儲 null 值。ArrayList 基本等同于 Vector,但 Vector 是線程安全的,也就是說是同步的,而 ArrayList 是線程不安全的, 不是同步的。 2)當需要增長時,Vector 默認增長為原來一倍,而 ArrayList 卻是原來的一半。 HashMap 和 Hashtable 的區(qū)別。 1)歷史原因:Hashtable 是基于陳舊的 Dictionary 類的,HashMap 是 Java 1.2 引進的 Map 接口的一個實現(xiàn)。 2)同步性:Hashtable 是線程安全的,也就是說是同步的,而 H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超齡人員安全協(xié)議書
- 防火涂料合作協(xié)議書
- 超市股份經(jīng)營協(xié)議書
- 通訊專利轉(zhuǎn)讓協(xié)議書
- 修理店轉(zhuǎn)讓合同協(xié)議書
- 道路建設出資協(xié)議書
- 項目運營招商協(xié)議書
- 金店股權合作協(xié)議書
- 高校應屆就業(yè)協(xié)議書
- 出租車并車合同協(xié)議書
- 伺服系統(tǒng)面試題及答案
- 2025年小班小手拍拍標準教案
- 校園閑置物品創(chuàng)新創(chuàng)業(yè)
- 法官助理的面試題及答案
- 預見性護理及早期風險識別課件
- 山東省淄博市、濱州市2025屆高三一模語文試題(含答案)
- 大學語文22孔子論孝
- 2025年小學《義務教育數(shù)學課程標準》(2022 年版)測試題庫及答案(共3套)
- 歡樂購物街第2課時 買賣我做主(教學設計)-2024-2025學年 一年級數(shù)學下冊人教版
- 2025年中國食品安全監(jiān)控軟件市場調(diào)查研究報告
- 密封基礎知識與各種密封形式
評論
0/150
提交評論