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