|
Java集合 收藏
Java數(shù)組是一個Java對象,數(shù)組的長度是固定的,在同一個數(shù)組中只能夠存放相同類型的數(shù)據(jù),數(shù)組可以存放基本類型的數(shù)據(jù),也可以存放引用類型的數(shù)據(jù)。在創(chuàng)建數(shù)組對象時,必須指定數(shù)組對象的長度,數(shù)組一旦創(chuàng)建,它的長度就不能再變 (1)創(chuàng)建數(shù)組對象(即new一個數(shù)組時)要指定數(shù)組的長度,數(shù)組的長度一旦指定,就不能夠再發(fā)生變化;
(2)同一個數(shù)組中的數(shù)據(jù)的類型必須相同,可以是基本類型,也可以是引用類型。
----------------------------------------------------------------------------------------------------------------------------------------------------
Java中的集合
(1)集合可以存儲和操縱數(shù)目不固定的一組數(shù)據(jù)
(2)集合中的元素只能夠是引用類型,不能夠是基本類型
(3)集合分為以下三種
a. Set 不排序 不重復
b. List 按索引位置排序 可以重復 允許按照對象在集合中的索引位置檢索對象(這點類似于數(shù)組)
c. Map 集合中的每一個元素包含一對鍵對象和值對象
集合中沒有重復的鍵對象,值對象可以重復
(4)Collection接口(注意引用的概念)
a.Collection接口聲明適用于Java集合(只有Set和List)的通用方法
add() 向集合中加入一個對象的引用
clear() 刪除集合中所有的對象,即集合不再持有這些對象的引用
contains() 判斷集合中是否持有特定對象的引用
isEmpty() 判斷集合是否為空
iterator() 返回一個Iterator類型的對象,通過這個對象可以遍歷集合中所有的元素
remove() 從集合中刪除一個對象的引用
size() 返回集合中元素的數(shù)目
toArray() 返回一個數(shù)組,包含集合中的所有元素
List 和 Set接口均繼承Collection接口,這些類型的對象可以使用上述方法,但是不能對Map對象調(diào)用以上的方法。
(5)Iterator接口
a. Iterator接口隱藏底層集合的數(shù)據(jù)結(jié)構(gòu),提供遍歷各種類型的集合的統(tǒng)一接口
b. Iterator接口中聲明了如下方法:
hasNext()
next()
remove()
---------------------------------------------------------------------------------------------------------------------------------------------------
1.Set
(1)Set是最簡單的一種集合,不排序,沒有重復對象
(2)Set是一個接口,它有兩個實現(xiàn)類,HashSet和TreeSet
a.HashSet類按照哈希算法來存取集合中的對象,存取速度比較快;
b.HashSet有一個子類LinkedHashSet,不僅實現(xiàn)哈希算法,而且實現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu),提高插入和刪除元素的性能;
TreeSet類實現(xiàn)了SortedSet接口,具有排序功能
(3)集合中存放的對象的引用
(4)集合中的add方法 向集合中添加對象的引用時,首先判斷這個對象是否已經(jīng)存在于集合中了,集合的add方法通過調(diào)用對象的equals方法判斷對象是否相同
不管是HashSet還是TreeSet,實現(xiàn)的Set接口,它們的共性在于集合中沒有重復的元素,集合不排序
《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》
1.1 HashSet
(1)按照哈希算法存取集合中的對象,具有很好的存取和查找性能
(2)當向集合中加入一個對象時,Hashset會調(diào)用對象的hashCode()方法獲得哈希碼,然后根據(jù)哈希碼進一步計算對象在集合中的存放位置
(3)在java.lang.Object中定義了hashCode()和equals()方法,在最原始的Object中定義的equals()方法是按照內(nèi)存地址比較對象是否相等,因此對于Object而言,如果equals方法的結(jié)果為true,則說明兩個引用實際上引用相同的對象,這兩個引用的哈希碼必然也相同
為保證HashSet能夠正常工作,要求兩個對象用equals()方法比較的結(jié)果為true時,他們的哈希碼也相同
如果用戶定義的類覆蓋了Object的equals方法而沒有覆蓋hashCode方法,會導致當equals方法結(jié)果為true時,對象的哈希碼并不相同,這樣會使hashSet無法正常工作,用戶本意是作為同一個對象引用處理,但是由于沒有覆蓋hashCode()方法,導致哈希碼不同,hashSet將作為不同對象處理。
1.2 TreeSet
(1)TreeSet實現(xiàn)了SortedSet接口,能夠?qū)现械膶ο筮M行排序,當TreeSet向集合中加入一個對象時,會把它插入到有序的對象序列中,TreeSet支持兩種排序方式:自然排序和客戶化排序
當TreeSet向集合中插入一個對象時,會自動進行排序:如何呢?調(diào)用對象的compartTo方法比較對象的大小,然后進行升序排序,所以對象必須實現(xiàn)Comparable接口,
1.2.1 自然排序
a.java類庫中有一部分類實現(xiàn)了Comparable接口,如Integer,Double和String,Comparable接口有一個compareTo(Object o)方法,返回整數(shù)類型;
b.TreeSet調(diào)用對象的compareTo()方法比較集合中對象的大小,然后進行升序排列,這種排序方式成為自然排序
c.使用自然排序時,必須向TreesSet集合中加入同類型的對象,并且這些對象的類必須實現(xiàn)了Comparable接口
d.對于TreeSet中已經(jīng)存在的對象,如果修改了他們的屬性,TreeSet不會對集合進行重新排序
1.2.2 客戶化排序
a.java.util.Comparator<Type>接口提供集體的排序方式,<Type>指定能夠被比較的對象的類型,用這種方式,首先定義一個類實現(xiàn)java.util.Comparator<Type>接口,然后在類的定義中實現(xiàn)Compare方法,在創(chuàng)建TreeSet對象時,將java.util.Comparator<Type>類型的對象作為參數(shù)傳入TreeSet的構(gòu)造器中。這樣TreeSet在向集合中插入對象時,會自動調(diào)用compareTo方法
==================================================================================
2.List
List的主要特征是其元素以現(xiàn)行方式存儲,集合中允許存放重復對象
2.1 List的實現(xiàn)類包括
ArrayList
a. 代表長度可變的數(shù)組;
b. 既然是數(shù)組,允許對元素進行快速的隨機訪問;
c. 向ArrayList中插入和刪除元素的速度較慢
LinkedList
a.在實現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu)
b.向List中插入和刪除元素的速度較快
c.隨機訪問的速度相對較慢,隨機訪問的含義是根據(jù)索引定位特定位置的元素
d.提供addFirst(0 addLast() getFirst() get拉斯特() removeFirst()和removeLast()方法,使LinkedList可以作為堆棧,隊列和雙向隊列使用
2.2 對List中元素的訪問
采用ArrayList實現(xiàn)可以直接通過索引訪問指定位置的List元素
2.3 列表排序
List只提供按照索引位置進行排序,如果希望對List中的對象按其他特定方式進行排序,可以借助于Comparator接口和Collections類,Collections類是Java類庫的的輔助類,提供操縱集合的各種靜態(tài)方法,其中sort()方法用于對List中的對象進行排序
sort(List list) 對List進行自然排序
sort(List list,Comparator comparator)根據(jù)Comparator實現(xiàn)類的compare方法對List進行客戶化排序
2.4 ListIterator接口
List的listIterator()方法返回一個ListIterator對象,ListIterator接口繼承Iterator,hasNext() next()
add() hasPrevious(0 previous()
2.5獲得指定長度的List對象
java.util.Arrays工具類提供asList()方法,將一個Java數(shù)組包裝成一個List對象
2.6 Java數(shù)組 隨機訪問速度快
ArrayList 隨機訪問快
LinkedList 最快的插入和刪除
==================================================================================
3.Map
3.1 一種把鍵對象和值對象進行映射的集合
3.2map是一種集合,他的每一個元素都是一個映射,包含一個鍵對象和一個值對象
3.3
a.向Map中插入元素時,必須提供一對鍵對象和值對象
b.從map集合中檢索時,只要給出鍵對象,就會返回對應(yīng)的值對象
3.4Map中的鍵值不能夠重復,但是值可以重復
3.5 Map中的方法
put()
get()
entrySet() 返回一個集合,存放Map.Entry類型的元素,每個Map.Entry對象代表Map中的一對鍵和值
3.6 Map的兩種實現(xiàn)
a HashMap
a.1 根據(jù)哈希碼存取元素,存取速度比較快
a.2 equals()和hashCode()方法要一致
b.TreeMap
使用TreeMap向集合中插入元素時,會進行排序,支持自然排序和客戶化排序兩種方式
==================================================================================
集合的工具類 Collections
1.提供一系列用于操縱java集合的靜態(tài)方法,它的一部分方法專門用于操縱List類型集合,還有一部分可用于操縱所有的Collection類型或Map類型集合
2.List實際是長度可變的數(shù)組(隨機訪問非常方便)
Collections中適用于List類型的方法
copy(List dest,List src);
fill(List list,Object o);
sort(List list)對list進行自然排序
binarySearch(List list,Object)
Collections中的以下方法適用于Collection類型或者Map類型集合
Object max(Collection coll)
Object max(Collection coll,Comparator comp)
Object min(Collection coll)
Object min(Collection coll,Comparator comp)
返回不可改變的集合,它只包含一個參數(shù)指定的對象,集合中僅包含一個元素,且集合不可以改變,因為集合不可以被修改,所以不用采用同步措施,提高并發(fā)性能
Set singletonSet(Object o)
List singletonList(Object o)
Map singletonMap(Object key,Object value)
在原來集合的基礎(chǔ)上,返回線程安全的集合對象,在多線程環(huán)境下,不允許一個線程對集合進行排序,另一個線程對集合進行修改
Collection synchronizedCollection(Collection c)
List synchronizedList(List list)
Map synchronizedMap(Map map)
Set synchronizedSet(Set set)
在原來集合的基礎(chǔ)上,返回不允許修改的集合視圖 ,集合的元素不允許被修改,生成原始的集合視圖,線程訪問這個集合視圖,不需要采用同步措施,因為視圖時不可以被修改的,相當于是不可變類,總是線程安全的,程序可以讀取視圖的內(nèi)容,但是不能夠修改它
Collection unmodifiedCollection(Collection c)
List unmodifiedList(List list)
Map unmodifiedMap(Map map)
Set unmodifiedSet(Set s)
對于不可變類無需設(shè)置線程同步,因為線程不會修改共享數(shù)據(jù),所以不會造成修改操作數(shù)的情況。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/JBuilder3/archive/2010/05/28/5630846.aspx
|
|
|