Java基礎(chǔ)_Java集合_第1頁
Java基礎(chǔ)_Java集合_第2頁
Java基礎(chǔ)_Java集合_第3頁
Java基礎(chǔ)_Java集合_第4頁
Java基礎(chǔ)_Java集合_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Java 集合概述Collection 接口Iterator 接口SetListMapCollections 工具類EnumerationJava Java 集合概述集合概述Collection Collection 接口接口Iterator Iterator 接口接口SetListMapCollections 工具類EnumerationJava 集合概述 Java 集合就像一種容器,可以把多個(gè)對(duì)象的引用多個(gè)對(duì)象的引用放入容器中。 Java 集合類可以用于存儲(chǔ)數(shù)量不等的多個(gè)對(duì)象,還可用于保存具有映射關(guān)系的關(guān)聯(lián)數(shù)組 Java 集合可分為 Set、List 和 Map 三種體系 Set:無序、不

2、可重復(fù)的集合 List:有序,可重復(fù)的集合 Map:具有映射關(guān)系的集合 在 Java5 之前,Java 集合會(huì)丟失容器中所有對(duì)象的數(shù)據(jù)類型,把所有對(duì)象都當(dāng)成 Object 類型處理;從 Java5 增加了泛型以后,Java 集合可以記住容器中對(duì)象的數(shù)據(jù)類型Java 集合概述Collection 接口 Collection 接口是 List、Set 和 Queue 接口的父接口,該接口里定義的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合:hasNext()next()hasNext()使用 Iterator 接口遍歷集合元素 Iterator 接口主要用于遍歷 C

3、ollection 集合中的元素,Iterator 對(duì)象也被稱為迭代器 Iterator 接口隱藏了各種 Collection 實(shí)現(xiàn)類的底層細(xì)節(jié),向應(yīng)用程序提供了遍歷 Collection 集合元素的統(tǒng)一編程接口 Iterator 僅用于遍歷集合,Iterator 本身并不提供承裝對(duì)象的能力。如果需要?jiǎng)?chuàng)建 Iterator 對(duì)象,則必須有一個(gè)被迭代的集合。使用 foreach 循環(huán)遍歷集合元素 Java 5 提供了 foreach 循環(huán)迭代訪問 CollectionJava 集合概述Collection 接口Iterator 接口SetSetHashSetHashSetLinkedHashSe

4、tLinkedHashSetTreeSetListMapCollections 工具類EnumerationSet 集合 Set Set 集合不允許包含相同的元素集合不允許包含相同的元素,如果試把兩個(gè)相同的元素加入同一個(gè) Set 集合中,則添加操作失敗。 Set 判斷兩個(gè)對(duì)象是否相同不是使用 = 運(yùn)算符,而是根據(jù)根據(jù) equals equals 方法方法HashSet HashSet 是 Set 接口的典型實(shí)現(xiàn),大多數(shù)時(shí)候使用 Set 集合時(shí)都使用這個(gè)實(shí)現(xiàn)類。 HashSet 按 Hash Hash 算法算法來存儲(chǔ)集合中的元素,因此具有很好的存取和查找性能。 HashSet 具有以下特點(diǎn): 不

5、能保證元素的排列順序不能保證元素的排列順序 HashSet HashSet 不是線程安全的不是線程安全的 集合元素可以使集合元素可以使 nullnull 當(dāng)向 HashSet 集合中存入一個(gè)元素時(shí),HashSet 會(huì)調(diào)用該對(duì)象的 hashCode() 方法來得到該對(duì)象的 hashCode 值,然后根據(jù) hashCode 值決定該對(duì)象在 HashSet 中的存儲(chǔ)位置。 如果兩個(gè)元素的 equals() 方法返回 true,但它們的 hashCode() 返回值不相等,hashSet 將會(huì)把它們存儲(chǔ)在不同的位置,但依然可以添加成功。hashCode() 方法 HashSet 集合判斷兩個(gè)元素相等的

6、標(biāo)準(zhǔn):兩個(gè)對(duì)象通過 equals() 方法比較相等,并且兩個(gè)對(duì)象的 hashCode() 方法返回值也相等。 如果兩個(gè)對(duì)象通過如果兩個(gè)對(duì)象通過 equals() equals() 方法返回方法返回 truetrue,這兩個(gè)對(duì)象的,這兩個(gè)對(duì)象的 hashCode hashCode 值也應(yīng)該相同。值也應(yīng)該相同。 重寫 hashCode() 方法的基本原則 在程序運(yùn)行時(shí),同一個(gè)對(duì)象多次調(diào)用 hashCode() 方法應(yīng)該返回相同的值 當(dāng)兩個(gè)對(duì)象的 equals() 方法比較返回 true 時(shí),這兩個(gè)對(duì)象的 hashCode() 方法的返回值也應(yīng)相等 對(duì)象中用作 equals() 方法比較的 Fiel

7、d,都應(yīng)該用來計(jì)算 hashCode 值LinkedHashSet LinkedHashSet 是 HashSet 的子類 LinkedHashSet 集合根據(jù)元素的 hashCode 值來決定元素的存儲(chǔ)位置,但它同時(shí)使用鏈表維護(hù)元素的次序,這使得元素看起來是以插入順序保存的使得元素看起來是以插入順序保存的。 LinkedHashSet LinkedHashSet 性能插入性能略低于性能插入性能略低于 HashSetHashSet,但在迭代訪問 Set 里的全部元素時(shí)有很好的性能。 LinkedHashSet LinkedHashSet 不允許集合元素重復(fù)不允許集合元素重復(fù)。Java 集合概述

8、Collection 接口Iterator 接口SetHashSetLinkedHashSetTreeSetTreeSetListMapCollections 工具類EnumerationTreeSet TreeSet 是 SortedSet 接口的實(shí)現(xiàn)類,TreeSet TreeSet 可以確??梢源_保集合元素處于排序狀態(tài)集合元素處于排序狀態(tài)。 Comparator comparator() Object first() Object last() Object lower(Object e) Object higher(Object e) SortedSet subSet(fromElem

9、ent, toElement) SortedSet headSet(toElement) SortedSet tailSet(fromElement) TreeSet TreeSet 支持兩種排序方法:自然排序和定制排序支持兩種排序方法:自然排序和定制排序。默認(rèn)默認(rèn)情況下,情況下,TreeSet TreeSet 采用自然排序采用自然排序。自然排序排序:TreeSet TreeSet 會(huì)調(diào)用集合元素的會(huì)調(diào)用集合元素的 compareTo(Object obj) compareTo(Object obj) 方方法來比較元素之間的大小關(guān)系,然后將集合元素按升序排列法來比較元素之間的大小關(guān)系,然后將集

10、合元素按升序排列如果試圖把一個(gè)對(duì)象添加到如果試圖把一個(gè)對(duì)象添加到 TreeSet TreeSet 時(shí),則該對(duì)象的類必須實(shí)時(shí),則該對(duì)象的類必須實(shí)現(xiàn)現(xiàn) Comparable Comparable 接口。接口。實(shí)現(xiàn) Comparable 的類必須實(shí)現(xiàn) compareTo(Object obj) 方法,兩個(gè)對(duì)象即通過 compareTo(Object obj) 方法的返回值來比較大小。Comparable 的典型實(shí)現(xiàn): BigDecimal、BigInteger 以及所有的數(shù)值型對(duì)應(yīng)的包裝類:按它們對(duì)應(yīng)的數(shù)值大小進(jìn)行比較 Character:按字符的 UNICODE 值來進(jìn)行比較 Boolean:tr

11、ue 對(duì)應(yīng)的包裝類實(shí)例大于 false 對(duì)應(yīng)的包裝類實(shí)例 String:按字符串中字符的 UNICODE 值進(jìn)行比較 Date、Time:后邊的時(shí)間、日期比前面的時(shí)間、日期大自然排序 因?yàn)橹挥邢嗤惖膬蓚€(gè)實(shí)例才會(huì)比較大小,所以向向 TreeSet TreeSet 中添加的應(yīng)該是同一個(gè)類的對(duì)象中添加的應(yīng)該是同一個(gè)類的對(duì)象 當(dāng)需要把一個(gè)對(duì)象放入當(dāng)需要把一個(gè)對(duì)象放入 TreeSet TreeSet 中,重寫該對(duì)象對(duì)應(yīng)的中,重寫該對(duì)象對(duì)應(yīng)的 equals() equals() 方法時(shí),應(yīng)保證該方法與方法時(shí),應(yīng)保證該方法與 compareTo(Object obj) compareTo(Object o

12、bj) 方法有一致的結(jié)果方法有一致的結(jié)果:如果兩個(gè)對(duì)象通過 equals() 方法比較返回 true,則通過 compareTo(Object obj) 方法比較應(yīng)返回 0定制排序 如果需要實(shí)現(xiàn)定制排序,則需要在創(chuàng)建 TreeSet 集合對(duì)象時(shí),提供一個(gè) Comparator 接口的實(shí)現(xiàn)類對(duì)象。由該 Comparator 對(duì)象負(fù)責(zé)集合元素的排序邏輯Java 集合概述Collection 接口Iterator 接口SetListListArrayListArrayListVectorVectorMapCollections 工具類EnumerationList List 代表一個(gè)元素有序、且可重

13、復(fù)的集合,集合中的每個(gè)元素都有其對(duì)應(yīng)的順序索引 List 允許使用重復(fù)元素,可以通過索引來訪問指定位置的集合元素。 List 默認(rèn)按元素的添加順序設(shè)置元素的索引。 List 集合里添加了一些根據(jù)索引來操作集合元素的方法 void add(int index, Object ele)void add(int index, Object ele) boolean addAll(int index, Collection eles)boolean addAll(int index, Collection eles) Object get(int index)Object get(int index)

14、 int indexOf(Object obj)int indexOf(Object obj) int lastIndexOf(Object obj)int lastIndexOf(Object obj) Object remove(int index)Object remove(int index) Object set(int index, Object ele)Object set(int index, Object ele) List subList(int fromIndex, int toIndex)List subList(int fromIndex, int toIndex)O

15、X1122OX22330X98760X98760X984501234Person1Person2Person3Person4Person5ListIterator List 額外提供了一個(gè) listIterator() 方法,該方法返回一個(gè) ListIterator 對(duì)象, ListIterator 接口繼承了 Iterator 接口,提供了專門操作 List 的方法: boolean hasPrevious() Object previous() void add()ArrayList 和 Vector ArrayList 和 Vector 是 List 接口的兩個(gè)典型實(shí)現(xiàn) 區(qū)別: 是一個(gè)古

16、老的集合,通常建議使用 ArrayList ArrayList 是線程不安全的,而 Vector 是線程安全的。 即使為保證 List 集合線程安全,也不推薦使用 Vector Arrays.asList() 方法返回的 List 集合即不是 ArrayList 實(shí)例,也不是 Vector 實(shí)例。 Arrays.asList() 返回值是一個(gè)固定長度的 List 集合。Java 集合概述Collection 接口Iterator 接口SetListMapMapHashMapHashMapHashtableHashtableLinkedHashMapLinkedHashMapTreeMapTre

17、eMapPropertiesPropertiesCollections 工具類EnumerationMap Map 用于保存具有映射關(guān)系的數(shù)據(jù),因此 Map 集合里保存著兩組值,一組值用于保存 Map 里的 Key,另外一組用于保存 Map 里的 Value Map 中的 key 和 value 都可以是任何引用類型的數(shù)據(jù) Map Map 中的中的 Key Key 不允許重復(fù)不允許重復(fù),即同一個(gè) Map 對(duì)象的任何兩個(gè) Key 通過 equals 方法比較中返回 false Key 和 Value 之間存在單向一對(duì)一關(guān)系,即通過指定的 Key 總能找到唯一的,確定的 Value。AABBCCD

18、Dperson1person2person4person3AABBCCDDperson1person2person3Map 常用方法HashMap & Hashtable HashMap 和 Hashtable 是 Map 接口的兩個(gè)典型實(shí)現(xiàn)類 區(qū)別: Hashtable 是一個(gè)古老的 Map 實(shí)現(xiàn)類,不建議使用 Hashtable 是一個(gè)線程安全的 Map 實(shí)現(xiàn),但 HashMap 是線程不安全的。 Hashtable 不允許使用 null 作為 key 和 value,而 HashMap 可以 與 HashSet 集合不能保證元素的順序的順序一樣,Hashtable 、HashMa

19、p 也不能保證其中 key-value 對(duì)的順序 Hashtable 、HashMap 判斷兩個(gè) Key 相等的標(biāo)準(zhǔn)是:兩個(gè) Key 通過 equals 方法返回 true,hashCode 值也相等。 Hashtable 、HashMap 判斷兩個(gè) Value相等的標(biāo)準(zhǔn)是:兩個(gè) Value 通過 equals 方法返回 trueLinkedHashMap LinkedHashMap 是 HashMap 的子類 LinkedHashMap 可以維護(hù) Map 的迭代順序:迭代順序與 Key-Value 對(duì)的插入順序一致Properties Properties 類是 Hashtable 的子類,

20、該對(duì)象用于處理屬性文件 由于屬性文件里的 key、value 都是字符串類型,所以 properties 里的 Key 和 Value 都是字符串類型的TreeMap TreeMap 存儲(chǔ) Key-Value 對(duì)時(shí),需要根據(jù) Key 對(duì) key-value 對(duì)進(jìn)行排序。TreeMap 可以保證所有的 Key-Value 對(duì)處于有序狀態(tài)。 TreeMap 的 Key 的排序: 自然排序:TreeMap 的所有的 Key 必須實(shí)現(xiàn) Comparable 接口,而且所有的 Key 應(yīng)該是同一個(gè)類的對(duì)象,否則將會(huì)拋出 ClasssCastException 定制排序:創(chuàng)建 TreeMap 時(shí),傳入一個(gè) Comparator 對(duì)象,該對(duì)象負(fù)責(zé)對(duì) TreeMap 中的所有 key 進(jìn)行排序。此時(shí)不需要 Map 的 Key 實(shí)現(xiàn) Comparable 接口Java 集合概述Collection 接口Iterator 接口SetListCollections Collections 工具類工具類EnumerationEnumeration操作集合的工具類:Collections Collections 是一個(gè)操作 Set、List 和 Map 等集合的工具類 Collections 中提供了大量方法對(duì)集合元素進(jìn)行排序、查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論