Java集合與數(shù)組
1.Java2提供了一 個完整的集合框架,而Java的早期版本只提供了一些集合類,如Hashtable和Vector,以及內(nèi)建的數(shù)組功能。
2.組成集合框架的類和接口是java.util包的成員,Arrays類提供了用于操作數(shù)組的static方法,Aarrys類的方法包括用于查找的binarySearch方法,用于比較數(shù)組的equals方法,用于給數(shù)組賦值的fill方法,以及排序的sort方法和asList方法。另外對Arrays類中的對象進(jìn)行排序,對象必須實現(xiàn)Comparable接口的compareTo方法
3.Size方法得到List中元素的個數(shù),get得到List中取出第一個元素
4.Collection接口是集合層次結(jié)構(gòu)中的根接口,Set接口和List接口都是從Collection接口中派生出來的,Collection接口包含了在集合中添加,清除,比較和保持對象的大規(guī)模操作。Collection接口提供了iterator方法得到Iterator。
5.Collections類提供了許多操作集合的static方法,其中許多方法實現(xiàn)用于查找和排序等愛貓撲.愛生活。
6.List是一個能包含重復(fù)元素的已排序的Collection,有時候List也稱為序列,List接口由ArrayList類,LinkedList類和Vector實現(xiàn)的,ArrayList是List可變數(shù)組的實現(xiàn),類似Vector類的行為和功能,LinkedList則是List的鏈表實現(xiàn)。
7.iterator的hasNext方法卸螩ollection是否還含有另外一個元素,如果還有,則hasNext方法返回true,next方法返回Collection中的下一個對象并移動到下一個元素。
8.subList得到List的一部分,這一部分被稱為子表,對子表的修改都會影響到List,clear方法從List中刪除元素,
9.toArray方法以數(shù)組的形式返回集合中的內(nèi)容。
10.Comparator對象提供一種排序方式,可以按不同Colletion自然順序的順序?qū)ollection的元素排序,reverseOrder方法返回一個Comparator對象,它代表了集合的逆轉(zhuǎn)排序。也可以實現(xiàn)你自己的排序方法,前提是實現(xiàn)Comparator接口,并實現(xiàn)Comparator接口的compare方法
11.Shuffle算法對list中的元素進(jìn)行隨機排序,binarySearch算法在List中查找一個Object
12.Set是不包含重復(fù)元素的Collection,集合框架含有Set的兩種實現(xiàn)方式:HashSet和TreeSet,HashSet把他的元素存儲在哈希表中,而TreeSet則把他的元素存儲在樹中。
13.SortedSet接口擴展了Set并按排好的順序維護(hù)了它的元素,TreeSet類實現(xiàn)了它。
14.headSet方法得到TreeSet中小于一個指定元素的子集,對這一子集的修改都會反映在TreeSet中,tailSet方法得到大于或等于指定元素的子集,同樣對它的修改都會反映在TreeSet中。
15.Map把鍵映射到值并不包含重復(fù)的鍵,Map和Set的不同之處在于Map包含鍵和值,而Set只包含鍵,HashMap和TreeMap類實現(xiàn)了Map接口,HashMap把他的元素存儲在哈希表中,而TreeMap則把他的元素存儲在樹中。
16.SortedMap接口擴展了Map并按排好的順序維護(hù)了它的元素,TreeMap類實現(xiàn)了它。
17.內(nèi)建的集合都是異步的,多線程對Collection的并發(fā)訪問可能導(dǎo)致不確定的結(jié)果,為了防止這個問題,可以在被多線程訪問的類外面使用同步包裝類,Collections類提供了一系列的static方法把集合轉(zhuǎn)化成不可以修改的形式,當(dāng)試圖修改時,拋出異常。
Public static方法頭文件:(同步)
Collection synchronizedCollection(Collection c);
List synchronizedList(List c)
其他類似。。
Public static方法頭文件:(不可以修改)
Collection unmodifiableCollection(Collection c);
List unmodifiableList(List c)
其他類似。。
集合框架提供了不同的抽象實現(xiàn),程序員可以利用此來實現(xiàn)自己定義的實現(xiàn)!
18.數(shù)組和容器的區(qū)別主要有以下三點:效率,類型識別以及可以持有primitives
19.容器類保持的類型都是Object的,主要有三種 list ,set, map,容器的缺點主要是保存元素的時候,丟失元素的類型,使用元素的時候,必須進(jìn)行類型轉(zhuǎn)換
20 list的選擇:
ArrayList隨機訪問的效率要比LinkList快,但是LinkList順序訪問的效率則高過ArrayList,另外LinkList在對元素進(jìn)行插入和刪除操作時要比ArrayList的效率高,二者的最佳選擇方法是:首先選用ArrayList當(dāng)發(fā)現(xiàn)“向元素中插入和刪除操作太多時”引發(fā)性能問題時,換用LinkList,當(dāng)然處理固定元素還是選用數(shù)組
21.set的選擇:
HashSet的各項性能都要比TreeSet強,但是TreeSet的意義在于能順序保存元素,因此只有在需要有順序set時才用TreeSet;
LinkedHashSet的插入操作要比HashSet慢,主要是因為前者承擔(dān)了鏈表和hash容器的雙重代價,由于鏈表的緣故LinkedHashSet的遍歷則要比 HashSet快
22.Map的選擇:
HashMap的效率和HashTable差不多,一般來說HASHMAP要稍快,HASHMAP是用來取代HASHTABLE的,TREEMAP的效率要比HAHSMAP低,但是TREEMAP由于是樹結(jié)構(gòu),所以是有序的,因此不需要進(jìn)行排序操作,如果不需要恒定有序的MAP時,一般來說首選HASHMAP,LINKEDHASHMAP比HASHMAP要慢,因為除了保存HASH容器外還有保存鏈表,IDENTITYHASHMAP沒有辦法和上敘MAP比較,它用的是==來比較兩個對象的相等性,而不是equals()
23.所有hash類容器持有的對象必須覆蓋hashcode和equals方法