一、陣列、集合
陣列、集合:都是一種容器,用一個物件管理多個物件;
陣列:不能自動增長;只能存放同類型的元素
集合:能自動擴容;部分集合允許存放不同型別的元素;
二、學習這些集合類要掌握哪些東西:
1)怎樣得到(選擇)集合物件;
2)怎樣新增元素
3)怎樣刪除元素
4)怎樣迴圈遍歷沒一個元素
三、list、set、map
collection:父介面;
Set:介面---一個實現類:HashSet
List:介面---三個實現類:LinkedList,Vector,ArrayList
SortedSet:介面---實現類:TreeSet
1、List:
List:有序列表,允許存放重複的元素;
實現類:
ArrayList:陣列實現,查詢快,增刪慢,執行緒不安全,輕量級;下標也是從0開始;
LinkedList:連結串列實現,增刪快,查詢慢
Vector:陣列實現,執行緒安全,重量級
:
無序集合,不允許存放重複的元素;
實現類HashSet:equals返回true,hashCode返回相同的整數;雜湊表;
子介面SortedSet:對Set排序實現類:TreeSet:二叉樹實現的;
看API:泛型:表示一個物件;
Iterator:介面,迭代器;
;
hasNext;
next;
remove;
Iterable:可迭代的,訪問的;
ng;實現了可迭代的介面就可以用迭代的方式訪問;
只需實現iterator;方法即可;Iteratoriterator;
三種迴圈的訪問方式:
只有實現了Iterable介面的才能用第三種;能用第二種的也一定能用第三種;
ArrayList:自動擴容,是陣列照搬過來的;
HashMap:鍵值對,key不能重複,但是value可以重複;key的實現就是HashSet;value對應著放;
HashSet的後臺有一個HashMap;初始化後臺容量;只不過生成一個HashSet的話,系統只提供key的訪問;
如果有兩個Key重複,那麼會覆蓋之前的;
Hashtable:執行緒安全的
Properties:erties;key和value都是String型別,用來讀配置檔案;
HashMap與Hashtable區別:
HashMap執行緒不安全的,允許null作為key或value;
Hashtable執行緒安全的,不允許null作為key或value;
TreeMap:對key排好序的Map;key就是TreeSet,value對應每個key;
key要實現Comparable介面或TreeMap有自己的構造器;
HashSet:remove(Objecto)的原則看這個物件O的Hashcode和equals是否相等,並不是看是不是一個物件;
定義一個Map;key是課程名稱,value是Integer表示選課人數;
(cou,(cou)+newInteger(1));
四、Hashtable、Properties
1,Hashtable:實現了Map介面,此類實現一個雜湊表,作用和HashMap相同,java集合總結。任何非null物件都可以用作鍵或值。為了成功地在雜湊表中儲存和獲取物件,用作鍵的物件必須實現hashCode方法和equals法。
2,Properties:繼承自Hashtable,比Hashtable更嚴格屬性列表中每個鍵及其對應值都是一個字串。
常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);
用法:我在C盤下建了一個名為的檔案,檔案的內容為:
name=hehe
password=12345
執行以下程式,輸出hehe,可見用Properties可以很方便的解析配置檔案
Propertiesp=newProperties;
(newFileInputStream("C:"));
tln(roperty("name"))
五、兩個工具類Arrays和Collections
ys、此類包含用來運算元組(比如排序和搜尋)的各種方法。此類還包含一個允許將陣列作為列表來檢視的靜態工廠
ections、主要提供了在collection上進行操作的靜態方法
六、遺留的幾個類
table,作用和HashMap相同,不過它是執行緒安全的,如果不需要執行緒安全,應該使用HashMap
eration,遺留集合使用列舉介面來遍歷元素,它有兩個方法,hasMoreElements和nextElement,用法類似Iterator。
k,繼承自Vector,實現了棧的功能,提供了push方法押棧和pop方法出棧。
et,位集。如果需要高效率的儲存一個位序列,例如一個標誌序列,請使用位集。它可以對各個位進行
讀取get(i)
設定set(i)
清楚clear(i)
七、常見筆試題目彙總
ection和Collections的區別。
Collection是集合類的上級介面,繼承與他的介面主要有Set和List.
Collections是針對集合類的`一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作,工作總結《java集合總結》。
,Set,Map是否繼承自Collection介面?
List,Set是,Map不是
3.兩個物件值相同(ls(y)==true),但卻可有不同的hashcode,這句話對不對?
不對,有相同的hashcode。
4.你所知道的集合類都有哪些?主要方法?
最常用的集合類是List和Map。List的具體實現包括ArrayList和Vector,它們是可變大小的列表,比較適合構建、儲存和操作任何型別物件的元素列表。List適用於按數值索引訪問元素的情形。
Map提供了一個更通用的元素儲存方法。Map集合類用於儲存元素對(稱作"鍵"和"值"),其中每個鍵對映到一個值。
5.排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(氣泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)
快速排序的虛擬碼。
//使用快速排序方法對a[0:n-1]排序
從a[0:n-1]中選擇一個元素作為middle,該元素為支點
把餘下的元素分割為兩段left和right,使得left中的元素都小於等於支點,而right中的元素都大於等於支點
遞迴地使用快速排序方法對left進行排序
遞迴地使用快速排序方法對right進行排序
所得結果為left+middle+right
Map和Hashtable的區別
都屬於Map介面的類,實現了將惟一鍵對映到特定的值上。
HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。
Hashtable類似於HashMap,但是不允許null鍵和null值。它也比HashMap慢,因為它是同步的。
裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還是equals它們有何區別?
Set裡的元素是不能重複的,那麼用iterator方法來區分重複與否。
equals是判讀兩個Set是否相等。
equals和==方法決定引用值是否指向同一物件equals在類中被覆蓋,為的是當兩個分離的物件的內容和型別相配的話,返回真值。
java集合總結(二)java集合類主要負責儲存、盛裝其他資料,因此集合類也稱容器類。java集合類分為:set、list、map、queue四大體系。其中set代表無序、不可重複的集合;list代表有序、可重複的集合。map代表具有對映關係的集合;queue代表隊列集合。
java集合類主要由兩個介面派生:Collection和Map,是集合框架的根介面。下面是其介面、子介面和實現類的繼承樹。
下面就一一介紹四大介面及其實現類。
Set介面。set集合不允許包含相同的元素。set判斷兩個物件是否相同是根據equals方法。如果兩個物件用equals方法返回的是true,set不會接受這兩個物件。
HashSet是set介面的典型實現,HashSet按hash演算法來儲存集合中的元素。因此具有很好的儲存和查詢效能。HashSet判斷兩個元素的標準是兩個元素的equals方法比較相等,同時兩個物件的hasCode方法返回值也相等。HashSet可以儲存null元素。
List集合代表一個有序集合。集合中的每個元素都有其對應的順序索引。Arraylist和vector是list介面的兩個典型實現。他們之間的顯著區別就是:vector是線性安全的,而arraylist不是。它們兩個都是基於陣列實現的list類。List還有一個基於連結串列實現的LinkedList類。當插入、刪除元素的速度非常快。這個類比較特殊,功能也特別多,即實現了List介面,也實現了Dueue介面(雙向佇列)。可以當成雙向佇列使用,也可以當成棧使用。
Queue用於模擬佇列的資料結構。LinkedList和ArrayDueue是其兩個比較常用的實現類。
Map用於儲存具有對映關係的資料。Map介面有如下幾個常用的實現類:HashMap、HashTable、TreeMap。TreeMap是基於紅黑樹對TreeMap中所有key進行排序。HashMap和HashTable主要區別有兩點:1、Hashtable是線性安全的,因此效能差些。2、HashMap可以使用null作為key或者value。
集合類還提供了一個工具類Collections。主要用於查詢、替換、同步控制、設定不可變集合。
上面是對java集合類的一般概述,下面就set、list、map三者之間的關係進行剖析。
Set與Map的關係。Map集合中所有key集中起來,就組成了一個set集合。所以Map集合提供SetkeySet方法返回所有key組成的set集合。由此可見,Map集合中的所有key具有set集合的特徵,只要Map所有的key集中起來,它就是一個Set集合,這就實現了Map到Set的轉換。同時,如果把Map中的元素看成key-value的set集合,也可以實現從Set到Map之間的轉換。HashSet和HashMap分別作為它們的實現類。兩者之間也挺相似的。HashSet的實現就是封裝了HashMap物件來儲存元素。它們的本質是一樣的。類似於HashSet和HashMap的關係,其實TreeMap和TreeSet本質也差不多,TreeSet底層也是依賴TreeMap實現。
Map與List的關係。把Map的key-value分開來看,從另一個角度看,就可以把Map與List統一起來。
Map集合是一個關聯陣列,key可以組成Set集合,Map中的value可以重複,所以這些value可以組成一個List集合。但是需要注意的是,實質Map的values方法並未返回一個List集合。而是返回一個不儲存元素的Collection集合,換一種角度來看對List集合,它也包含了兩組值,其中一組就是虛擬的int型別的索引,另一組就是list集合元素,從這個意思上看,List就相當於所有key都是int型的Map。
下面講解幾個相似類之間的差異。
ArrayList和LinkedList。ArrayList是一種順序儲存的線性表,其底層是採用陣列實現的,而LinkedList是鏈式儲存的線性表。其本質就是一個雙向連結串列。對於隨機儲存比較頻繁的元素操作應選用ArrayList,對於經常需要增加、刪除元素應該選用LinkedList。但總的來說ArrayList的總體效能還是優於LinkedList。
HashSet與HashMap的效能選項。主要有兩個方面:容量和負載因子(尺寸/容量)。較低負載因子會增加查詢資料的效能,但是會降低hash表所佔的記憶體開銷。較高負載因子則反之,一般對資料的查詢比較頻繁,所以一般情況下初始容量應該大一點,但也不能太大,否則浪費記憶體空間。