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