天天看點

黑馬程式員——黑馬學習日志之十一 集合(二)

------- android教育訓練、java教育訓練、期待與您交流! ----------

黑馬學習日志之十一 集合(二)

1 Map集合

Map<K,V>: 和Collection是并行的接口,将鍵映射到值的對象,該集合存儲鍵值對,一對一對往裡存,而且要保證鍵的唯一性,一個映射不能包含重複的鍵,每個鍵最多隻能映射到一個值。

K—此映射所維護的鍵的類型

V—映射值的類型

Collection 是單列集合。Map是雙列集合,像是夫妻,可以給元素加索引甚至起名字。

Map集合方法:

添加:

V put(k ,v): 傳回值。鍵是唯一的,當再次存入的鍵和集合中已有的鍵相同,會将原有的值覆寫。

void putAll(map); 将整個集合的元素添加到調用的集合中。

删除:

void clear():清除集合中所有的元素。

v remove(k) 通過鍵去删除元素,并傳回該鍵對應的值。

判斷:

boolean containsKey(Object key):是否包含這個鍵,傳回值是布爾類型。

boolean containsValue(Object value):是否包含這個值,傳回值的類型是布爾類型。

boolean isEmpty(): 傳回值是布爾類型,判斷集合是否為空。

擷取:

v get(k):根據鍵擷取值。當鍵不存在傳回null,要盡量使用引用類型進行接收。

int size():擷取集合中的長度。

Collection values() 擷取集合中所有的值,傳回是單列的集合。

Set keySet():擷取map集合中所有的鍵,傳回的是Set集合

Set entrySet():擷取的是鍵值的映射的關系。将映射關系封裝成對象存入到了Set集合。

2 Map集合的取出

第一種方法:

Set keyset(): 傳回此集合映射中的所有的鍵的集合Set集合,傳回的是Set集合。然後通過    周遊鍵的方法,通過get的方法擷取到鍵的值。

第二種方法:

Set entrySet(): 傳回一對鍵值對象,将map中的鍵值映射關系看成一個對象,通過getKey和getValue的方法擷取其鍵和值。

Map中的鍵值映射關系是Map.Entry。  Map.Entry:其實Entry也是一個接口 它是Map接口中的一個内部接口

例子:

第一種:

import java.util.*;

class MapDemo2

{

 public static void main(String [] args){

  Map<String,String> map= new HashMap<String ,String>();

     map.put("02","sun2");

   map.put("03","sun3");

   map.put("01","sun1");

   map.put("04","sun4");

   //先擷取map集合的所有鍵的Set集合,keySet();

   Set<String> keySet = map.keySet();

   //Set集合使用其疊代器

   Iterator<String> it = keySet.iterator();

   while (it.hasNext())

   {

    String key = it.next();

    //有了鍵可以通過map集合的get方法擷取其對應的值

     String value = map.get(key);

    System.out.println("key:"+key+",value"+value);

   }

 }

}

第二種:

//将map集合中的映射關系取出,存入到Set集合中

  Set<Map.Entry<String,String>> entrySet = map.entrySet();

    Iterator<Map.Entry<String,String>> it = entrySet.iterator();

    while (it.hasNext())

   {

    Map.Entry<String,String> me = it.next();

     String key = me.getKey();

    String value=me.getValue();

    System.out.println(key+":"+value);

   }

2 Map的子類

Map集合的子類:

HashTable  底層是哈希表資料結構,不可以存入null鍵和null值。該集合是線程同步。

HashMap  底層是哈希表資料結構,允許使用null鍵和null值。該集合不同步。

TreeMap  底層是二叉樹資料結構,線程不同步,可以用于給Map集合的鍵進行排序。

和Set集合很像,其實Set集合底層就是Map。

3 工具類

Collections類

sort() 對指定清單按升序進行排序。

sort( list, new Comparator()) 對指定的清單用我們指定的方式排序

reverseOrder() 将原先的集合的自然順序倒序排序。

reverseOrder(new Comparator()) 傳回一個比較器,它強行逆轉指定比較器的順序。

binarySearch() 對有序的集合二分查找,傳回值是集合中的索引,如果不存在該元素,  就傳回-(插入點)-1。

fill( list, obj)用obj将集合中的元素替代

reverse(List list)集合反轉

swap(List list, int i, int j);指定位置的交換

shuffle(List list);對集合中的元素随機置換(洗牌)

replaceAll(List list, T oldVal, T newVal)新元素替換老元素

同步集合 synchronizedList(List<T> list)  synchronizedMap(Map<T> map)    synchronizedSet(Set<T> sett)

Arrays類

asList() 将數組轉換成List集合。可以使用集合的方法和思想來操作數組。

注意:

(1)數組變成集合,但是不可以使用集合的增删方法。數組長度是固定的,增删會發生   不支援操作異常

(2)當數組中存儲的是基本資料類型,變成集合後,會将這個數組變成集合中的元素

(3)當數組中存儲的是引用資料類型,變成集合後,就将數組中的元素作為集合中的元素

集合變數組:Collection接口的toArray()方法。

ArrayList<String> al = new ArrayList<String>();

String[] arr = al.toArray(new String[0]);

長度該怎麼定義呢?

當指定的長度小于集合的長度,該方法内部會自動建立一個該類型的新數組長度和集合長度一緻 。用于存儲集合中的元素。

如果指定的數組長度大于集合的長度,那麼該方法就不會建立新數組。而是使用傳遞進來的數組,存儲完集合的元素後,其他的未存儲的位置為null。

是以在定義數組是,最好定義長度和集合長度相同的數組最優。

将集合變成數組其實是限定了對元素的增删操作。

4 進階for循環

格式:

for(資料類型 變量名:被周遊的集合Collection或者數組)

{

}

局限:隻能取出 不能修改

進階for循環變量 隻是指向了集合中的元素 當變量名=其他值時 ,實際是變量名指向發生變化 沒有指向集合中的元素 是以集合中的元素還是不變的

傳統for和進階for有什麼差別?

進階for有一個局限性 必須有被周遊的目标   例如 将helloword 列印100次 進階for不可以

建議在周遊數組的時候,使用傳統for,因為可以定義腳标,對腳标進行操作

5  JDk1.5 新特性

可變參數

其實就是上一種數組參數的簡寫形式,不用每一次都手動的建立數組對象,隻要将要操作的元素作為參數傳遞即可,隐式将這些參數封裝成了數組。

   show(3,4);

   show(3,4,5);

 publicstaticvoidshow(int...arr)

{

Sop(arr);

 }

注意:可變參數一定要定義在參數清單的最後面

show(int...arr,int a) 不可以

show(int...arr,String a)不可以

show(String a ,int...arr) 可以

靜态導入

當類名重名時,需要指定具體的包名

當方法名重名時,指定具體所屬的對象或者類

import static java.util.Arrays.*;   導入Arrays這個類中的所有靜态成員

import static java.lang.System.*;  導入System類中所有靜态成員

------- android教育訓練、java教育訓練、期待與您交流! ----------