1. 程式人生 > >Java集合基礎

Java集合基礎

廣泛 菱形 泛型方法 size 位置 添加 實現 table 無序

Java集合框架的由來

java1.2之前,java沒有完整的集合框架。它只有一些簡單的可以擴展的容器類,比如VictorStackHashtable

為什麽需要容器類:容器(集合類)可以存儲多個數據。

數組的弊端:

1.長度是不可變的,一旦數組初始化之後,長度是固定的

2.N個地方需要存儲多個數據,都得專門去編寫數組的操作方法。

什麽是集合框架

盡管這些容器類非常好用,但是卻不能集中和統一管理。集合框架是為表示和操作集合而規定的統一的標準的體系結構。任何集合框架都包含三大塊內容:對外的接口、接口的實現和對集合運算的算法。

為什麽需要集合(集合框架的類和接口都放在java.util包中)

1.提供功能的復用

2.讓程序員專註業務開發,而不是數據結構和算法

常用的集合:

集合中存儲的對象,稱之為集合的元素。

Set:集合中的對象不按特定的方式排序,不允許元素重復

List:集合中的對象按照索引位置排序,允許重復

Map:集合中的每一個元素都包含一堆keyvalue對象,不允許key對象重復,值是可以重復

鏈表結構

1.單向鏈表:只能從頭遍歷到尾巴 或者只能從尾巴遍歷到頭

2.雙向鏈表:既可以從頭到尾也可以從尾遍歷到頭

通過引用關系來表示上一個節點和下一個節點的關系

二.集合的叠代操作

1.for循環

2.For-each

3.Iterrator步驟

a.調用iterator() 方法 b.調用hasNext()方法 c.調用next()方法

三.Set接口

1.Set接口存儲一組唯一的、無序的對象

2.不會記錄元素的添加先後順序

3.HashSetSet接口常用的實現類

HashSet如何判斷兩個對象是否相同

1.兩個對象的equals比較相等,返回true,說明是相同對象

2.兩個對象的hashCode方法返回值相等

比較過程:當往HashSet集合中添加新的對象的時候,先會判斷該對象和集合對象中的hashCode

1)不等:直接把該新的對象存儲到hashCode指定的位置

2)相等:再繼續判斷新對象和集合對象中equals作比較

a) hashCode相同,equals相同true:則視為是同一個對象,則不保存在哈希表中

b) hashCode相同,equals不同false

Set接口如何判斷加入對象時候已經存在?

采用對象的equals()方法比較兩個對象時候相等

四.Map接口

映射的數學解釋:

A/B兩個非空集合,如果存在一個法則f,使得A中的每個元素,按照法則f,在B中有唯一的確定的元素b與之對應,則稱為從AB的映射。

映射關系(兩個集合)A集合和B集合>>>>A集合中的每一個元素都可以在B集合中找到唯一的一個字與之對應。

嚴格上來說,Map是集合不太恰當,應該是兩個集合之間的映射關系,然而Map可以存儲數據(每次存儲都應該存儲A集合中一個元素(Key),B集合中的一個元素(value)),我們習慣吧Map也稱之為集合。

問題:建立國家英文簡稱和中文全民之間的鍵值映射

遍歷Map集合:叠代器 增強for循環

常用方法: put(k,v) get(k) remove(k) size() keySet()--返回Set

五.泛型

為什麽要使用泛型:

1.存儲任意類型的數據在集合中,但是取出來的時候都是Object類型,此時就得強制類型轉換

2.可以約束存儲到集合中的元素必須是相同的數據類型(相同的數據類型才能作比較)

3.設計 一個 Point 類,來表示坐標位置,要求坐標位置支持String IntegerDouble類型

什麽是泛型:將對象的類型作為參數,指定到其他類或者方法上,從而保證類型轉換的安全性和穩定

1.廣泛通用的類型

2.代碼模板中類型不確定,誰調用該代碼,誰指明類型是什麽

泛型類:直接在類/接口上定義的泛型

使用泛型:

保證前後類型相同

List<String> list=new ArrayList<String>() // 該集合只能存儲String類型

因為前後類型相同,所以從java7開始,推出了泛型的菱形語法<>

List<String> list=new ArrayList<>();

泛型不存在繼承關系:List<Object> list=new ArrayList<String>() >>>>>錯誤的語法

以後,使用集合都得用泛型來約束該集合中的元素類型。

泛型方法:在方法上聲明泛型

情況1:泛型類中的泛型只適用於非靜態方法,如果需要給靜態方法設置泛型,此時使用泛型方法

情況2:泛型類中的方法

一般的,把自定義的泛型作為該方法的返回類型才有意義,而且此時的泛型必須由參數設置進來的。如果沒有參數來設置泛型的具體類型,此時的方法一般返回設計Object即可。

Java集合基礎