為什么要使用集合類
當(dāng)你事先不知道要存放數(shù)據(jù)的個(gè)數(shù),,或者你需要一種比數(shù)組下標(biāo)存取機(jī)制更靈活的方法時(shí),你就需要用到集合類,。 理解集合類 集合類存放于java.util包中,。 集合類存放的都是對(duì)象的引用,而非對(duì)象本身,,出于表達(dá)上的便利,,我們稱集合中的對(duì)象就是指集合中對(duì)象的引用(reference)。 集合類型主要有3種:set(集),、list(列表)和map(映射),。 其中List和Set接口都繼承自Collection接口,,而Map接口和他倆不同,不是繼承于Collection接口,。 (1)集 Set 集(set)是最簡(jiǎn)單的一種集合,,它的對(duì)象不按特定方式排序,只是簡(jiǎn)單的把對(duì)象加入集合中,,就像往口袋里放東西,。 對(duì)集中成員的訪問(wèn)和操作是通過(guò)集中對(duì)象的引用進(jìn)行的,所以集中不能有重復(fù)對(duì)象,。 集也有多種變體,,可以實(shí)現(xiàn)排序等功能,如TreeSet,,它把對(duì)象添加到集中的操作將變?yōu)榘凑漳撤N比較規(guī)則將其插入到有序的對(duì)象序列中,。它實(shí)現(xiàn)的是SortedSet接口,也就是加入了對(duì)象比較的方法,。通過(guò)對(duì)集中的對(duì)象迭代,,我們可以得到一個(gè)升序的對(duì)象集合。 1:HashSet 能夠快速定位一個(gè)元素,,但是它要求存入HasgSet的對(duì)象必須實(shí)現(xiàn)HashCode方法 2:TreeSet 將放入其中的元素按序存放 (2)列表 List List接口與其實(shí)現(xiàn)類是容量可變的列表,,可以按照索引訪問(wèn)集合中的元素,是有序的集合 列表在數(shù)據(jù)結(jié)構(gòu)中分別表現(xiàn)為:數(shù)組和向量,、鏈表,、堆棧、隊(duì)列,。 1:ArrayList: 實(shí)現(xiàn)一個(gè)數(shù)組,,它的規(guī)模可變并且能像鏈表一樣被訪問(wèn),。它提供的功能類似Vector類但不同步,,它是以Array方式實(shí)現(xiàn)的List,允許快速隨機(jī)存取,。 2:LinkedList: 實(shí)現(xiàn)一個(gè)鏈表,,提供最佳順序存取,適合插入和移除元素,。由這個(gè)類定義的鏈表也可以像?;蜿?duì)列一樣被使用。 (3)映射 Map 映射與集或列表有明顯區(qū)別,,映射中每個(gè)項(xiàng)都是成對(duì)的,,Map是把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器。映射中存儲(chǔ)的每個(gè)對(duì)象都有一個(gè)相關(guān)的關(guān)鍵字(Key)對(duì)象,,關(guān)鍵字決定了對(duì)象在映射中的存儲(chǔ)位置,,檢索對(duì)象時(shí)必須提供相應(yīng)的關(guān)鍵字,,就像在字典中查單詞一樣。關(guān)鍵字應(yīng)該是唯一的,,也就是說(shuō)Map中的鍵對(duì)象不允許重復(fù),,這是為了保證查詢結(jié)果的一致性。 關(guān)鍵字本身并不能決定對(duì)象的存儲(chǔ)位置,,它需要對(duì)過(guò)一種散列(hashing)技術(shù)來(lái)處理,,產(chǎn)生一個(gè)被稱作散列碼(hash code)的整數(shù)值,散列碼通常用作一個(gè)偏置量,,該偏置量是相對(duì)于分配給映射的內(nèi)存區(qū)域起始位置的,,由此確定關(guān)鍵字/對(duì)象對(duì)的存儲(chǔ)位置。理想情況下,,散列處理應(yīng)該產(chǎn)生給定范圍內(nèi)均勻分布的值,,而且每個(gè)關(guān)鍵字應(yīng)得到不同的散列碼,。 1:HashMap: 實(shí)現(xiàn)一個(gè)鍵到值映射的哈希表,,通過(guò)鍵取得值對(duì)象,允許存儲(chǔ)空對(duì)象,,而且允許鍵是空(由于鍵必須是唯一的,,當(dāng)然只能有一個(gè))。 2:HashTable: 實(shí)現(xiàn)一個(gè)映象,,所有的鍵必須非空,。為了能高效的工作,定義鍵的類必須實(shí)現(xiàn)hashcode()方法和equal()方法,。這個(gè)類是前面java實(shí)現(xiàn)的一個(gè)繼承,,并且通常能在實(shí)現(xiàn)映象的其他類中更好的使用。Dictionary的子類,,確省是線程同步的,。不允許關(guān)鍵字或值為null,當(dāng)元素的順序很重要時(shí)選用TreeMap,,當(dāng)元素不必以特定的順序進(jìn)行存儲(chǔ)時(shí),,使用HashMap. Hashtable的使用不被推薦,因?yàn)镠ashMap提供了所有類似的功能,,并且速度更快,。當(dāng)你需要在多線程環(huán)境下使用時(shí),HashMap也可以轉(zhuǎn)換為同步的,。 考試大提示:在編寫程序的過(guò)程中,,使用到集合類,要根據(jù)不同的需求,,來(lái)決定使用哪種集合類,,比如,,要經(jīng)常遍歷集合內(nèi)元素,就要使用List,,如果要保證集合中不存在重復(fù)的數(shù)據(jù),,就要用Set;如果要通過(guò)某一鍵來(lái)查找某一值,,就要使用Map,。 |
|
來(lái)自: 昵稱116853 > 《我的圖書(shū)館》