day18 集合框架(JCF)

集合框架(JCF)java collections frameworkjava

框架:爲了實現某一目的/功能而預先提供的一系列封裝好的具備繼承或實現關係的類與接口。算法

一、這種框架是高性能的,對基本類集(動態數組、連接表、樹、散列表)的實現是高效率的。數組

二、框架必須容許不一樣的類集以相同的方式和高度互相操做方式工做。安全

三、類集必須是容易擴展和修改的。框架

爲了實現這些目標,類集框架被設計成包含了一組標準接口的類與接口:性能

Collection 是存放一組單值的最大接口。線程

 

List——列表設計

是Collection的子接口,裏面的內容容許重複。code

List的特色:線性。即:有序。元素放入的順序和元素的存儲順序保持一致。對象

表象上:List最大的特色就是有下標。

ArrayList: 就是做爲一個數組的封裝出現的,底層就是數組。

LinkedList:底層封裝的是一個雙向鏈表。

一、查找、修改用的多的時候用ArrayList。

二、增長、刪除用的多的時候(特別是往中間增長、刪除)用LinkedList。

三、線程安全,數據量大的時候考慮用vector。

泛型<>:用來控制集合只能操做某一種數據類型。

遍歷:一、普通for循環遍歷。

        二、使用迭代器Iterator完成遍歷。——沒有下標從頭至尾走一遍,不能操做數組。

        三、for-each循環語句,底層封裝的就是迭代器,語法簡單,還能夠操做數組。推薦使用。

 

Set——集

是collection的子接口,裏面的內容不容許重複。

特色:不能放置重複元素,無序存放元素。

      表象上:Set沒有下標。

HashSet判斷兩元素不重複:一、調用equals方法比較兩對象

                                     二、兩元素的hashcode值保持一致

只有這兩個條件同時知足,java才認爲是同一對象。

全部重寫了equals方法通常要重寫hashcode方法,讓equals返回true的時候,hashcode返回的值應該同樣。

hashSet只有增、刪、求長度和遍歷等操做。

遍歷:一、迭代器

         二、for-each

 

Map——映射

是存放一對值的最大接口,全部的元素都以鍵和值的方式存儲。

特色:鍵值對——鍵要求惟一,值能夠重複

經常使用子類:hashMap、properties(專用於操做屬性文件)

hashMap

經常使用操做:增、刪、改、查、容、遍歷

遍歷的時候:不能同時遍歷全部的鍵和值,只能單獨遍歷鍵與值。

鍵在遍歷的時候用Set類型來接。

值在遍歷的時候用Collection來接。

hashMap與hashTable比較:一、hashMap非線性安全,hashTable是線性安全的。

                                     二、hashMap容許null來作鍵/值,hashTable不容許。

properties

經常使用操做:增、刪、查、改、容、存、取。

存的時候,調用的是.store方法存文件,

取的時候,調用.load方法取文件。

文件類型:.properties——固定格式的文本文件,將是工做中使用率第二的配置文件。

 

 

Iterator

集合的輸出接口,從前到後輸出指定集合中的內容。

 

ListIterator

是Iterator的子接口,能夠進行雙向輸出。

 

 

Enumeration

是最先的輸出接口,用於輸出指定集合中的內容。

 

 

 

collections

集合操做的算法類

包括排序、求最大、最小、反轉、隨機混排等操做

排序的時候,由於是對對象排序,因此應按必定的業務邏輯的天然順序排序。

比較器:

comparable接口:內部比較器

可對任意數組排序,java泛型技術,二叉樹排序原理

一、類實現comparable接口

二、重寫compareTo方法

compareTo方法返回的是int類型數據:1表示大於,-1表示小於,0表示相等。

comparator接口:外部比較器

補救的作法

此接口同樣須要重寫方法,但方法接收兩個對象,返回值依然是一、-一、0;

 

 

SortedSet

單值的排序接口,實現此接口的集合類,裏面的內容能夠使用比較器排序。

 

 

SortedMap

存放一對值的排序接口,裏面內容按照key排序,使用比較器排序。

 

 

Queue

隊列接口,此接口的子類能夠實現隊列操做。

 

Map.Entry

Map.Entry的內部接口,每一個

Map.Entry對象都保存着一對key——value的內容,每一個map接口中都保存有多個Map.Entry接口實例。

 

總的來講:

一、若是要求線程安全,使用Vector、Hashtable。

二、若是不要求線程安全,使用ArrayList(查找、修改較多的時候使用)、LinkedList(刪除、增長較多的時候使用)、HashMap(要求鍵值對映的時候使用)。

三、若是要求鍵值對應,使用HashMap、HashTable。

四、若是數據量大、又要求線程安全考慮使用Vector。

相關文章
相關標籤/搜索