黑馬程序員-Java語言基礎– Map 第16-17天

---------------------- android培訓java培訓、期待與您交流! ----------------------

 

Map集合:該集合存儲鍵值對,一對一對往裏存,而且要保證鍵的唯一性。

      1、添加。

           put(K key, V value)

           putAll(Map<? extendsK,? extends V> m)

 

      2、刪除。

           clear()

           remove(Object key)//根據鍵來刪除。鍵值唯一。將鍵值刪除並返回對應的值。

 

      3、判斷。

           containsKey(Object key)

           containsValue(ObjectValue)

           isEmpty()

 

      4、獲取。

           get(Object key)

           size()

           values()

 

           entrySet()

           keySet()

 

  Map

      |--Hashtable:底層是哈希表數據結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0 效率低。

      |--HashMap:底層是哈希表數據結構。允許使用null鍵null值。該集合是線程不同步的。將Hashtable替換。jdk1.2 效率高

      |--TreeMap:底層是二叉樹數據結構。線程不同步。可以用於給map集合中的鍵進行排序。(排序方式與TreeSet相似)

 

Map和Set很像。其實大家,Set底層就是使用了Map集合。

à可通過get方法的返回值是否爲null來判斷一個鍵是否存在。

à添加元素時,如果出現相同的鍵,那麼後添加的值會覆蓋原有鍵對應值,並且put方法會返回被覆蓋的值(返回原來的值)。

àHashMap只允許一條記錄的鍵爲空,但允許許多條記錄的值爲空。

 

map集合的兩種取出方式。[day16-04]

1、Set<k> keySet:將map中所有的鍵存入到Set集合中。因爲Set集合具備迭代器。所以可以通過迭代方式取出所有的鍵,然後根據get方法,獲取每一個鍵對應的值。

      Map集合的取出原理:將map集合轉成set集合,再通過迭代器取出。

2、Set<Map.Entry<k,v>>entryset:將Map集合中的映射關係存入到set集合中,而這個關係的數據類型就是Map.Entry.

      Map.Entry 其實Entry也是一個接口,它是Map中的一個內部接口。

什麼時候使用Map集合?

當發現數據之間存在映射關係時,就要先想到Map集合。

 

Map擴展:集合嵌套集合[day16-09]

 

集合框架中的工具類-----------------------------------------------day17

Collections類:

·對List排序:

      public static <T extendsComparable<? super T>> void sort(List<T> list);

      public static <T> voidsort(List<T> list,Comparator<? super T> c);

·獲取最值:

      public static <T extendsObject & Comparable<? extends T>> T max(Collection<? extendsT> coll);

      public static <T> Tmax(Collection<? extends T> coll,Comparator<> extends T> comp);

·二分查找:

      public static <T> intbinarySearch(List<? extends Comparable<? super T>> list,T key);

      public static <T> intbinarySearch(List<? extends T> list,T key,Comparator<? super T> c);

如果沒有找到返回-1

·替換反轉:

      public static <T> voidfill(List<? super T> list,T obj);fill方法可以將List集合中所有元素替換成指定元素。

      public static <T>boolean replaceAll(List<T> list,T oldVal,T newVal);

      public static voidreverse(List<?> list);

      public static <T>Comparator<T> reverseOrder();

      public static <T>Comparator<T> reverseOrder(Comparator<T> cmp);

      public static voidswap(List<?> list,int i,int j);

      public static voidshuffle(List<?> list);

 

Arrays類:操作數組

數組變集合:

    publicstatic <T> List<T> asList(T... a);

    List<String>list = Array.asList(arr);  Arrays中的asList()方法。

返回一個受指定數組支持的固定大小的列表(將數組變成List集合)。

      將數組變成List集合的好處:可以使用集合的思想和方法來操作數組中的元素。

 

注意:將數組變成集合,不可以使用集合的增刪方法,因爲數組的長度是固定的。[day17-7]

①如果數組中的元素都是對象,那麼變成集合時,數組中的元素就直接轉成集合中的元素。

②如果數組中的元素都是基本數據類型,那麼會將該數組作爲集合中的元素存在。

 

集合變數組:

      Collection接口中的toArray()方法。

1、指定類型的數組到底要定義多長呢?

      當指定類型的數組長度小於了集合的size,那麼該方法內部會創建一個新的數組,長度爲集合的size。

      當指定類型的數組長度大於了集合的size,就不會創建新的數組,而是使用傳遞進來的數組(會有null的值)。所以創建一個剛剛好的數組最優。使用.size()方法即可。

2、爲什麼要集合變數組?

      爲了限定對元素的操作。不需要進行增刪了。

 

增強for循環

JDK1.5新特性,只要實現了Iterable接口(此接口只有一個方法:iterator())的對象都可以成爲“foreach”語句的目標,即都可以使用增強for循環。

格式:

      for(數據類型 變量名:被遍歷的集合(Collection)或者數組)

           {

           }

      侷限:只能取出,不能修改。對集合進行遍歷,只能獲取集合元素,但是不能對集合進行操作。

      而迭代器除了遍歷,還可以進行remove集合中元素的動作,如果是用ListIterator,還可以在遍歷過程中進行增刪改查的動作。

傳統for循環與增強for循環有什麼區別?

      高級for循環有一個侷限性,必須有被遍歷的目標。建議在遍歷數組的時候,還是使用傳統for循環語句。

 

可變參數

publicstatic void show(String str,int… arr)                          [day17-19]

JDK1.5新特性,其實就是上一種數組參數的簡寫形式,不用每一次都手動建立數組對象,只要將要操作的元素作爲參數傳遞即可,隱式將這些參數封裝成了數組。

使用時注意:可變參數一定要定義在參數列表的最後面

 

靜態導入(StaticImport)

JDK1.5新特性。

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

import static java.lang.System.*;//導入了System類中所有靜態成員。

 

注意:

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

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

 

其他對象

System

      System:類中的方法和屬性都是靜態的。

      out:標準輸出,默認是控制檯(屏幕)。

      in:標準輸入。默認是鍵盤。

 

描述系統的一些信息。

獲取系統屬性信息:Properties getProperties()

因爲Properties是hashtable的子類,也就是Map集合的一個子類對象。那麼可以通過map的方法取出該集合中的元素。

該集合中存儲的都是字符串,沒有泛型定義。

 

Runtime對象。

      該類中並沒有提供構造函數。說明不可以new 對象。那麼就會直接想到該類中的方法都是靜態的。

      發現該類中還有非靜態方法。說明該類肯定會提供方法獲取本類對象,而且該方法是靜態的,而且返回值是本類類型。該方法是static Runtime  getRuntime();

由這個特點可以看出該類使用了單例設計模式完成。

 

Math

ceil :double d = Math.ceil(12.34);//ceil返回大於指定數據的最小整數。

           sop("d="+d);//d=13.0

floor:double d1 =Math.floor(12.34);//floor返回小於指定數據的最大整數。

           sop("d1="+d1);//d1=12.0

round:long l = Math.round(12.34);//四捨五入

           sop("l="+l);//12

pow:double d2 = Math.pow(2,3);//23

         sop("d2="+d2);//8

 

隨機數:publicstatic double random()

double d = Math.random()//[0,1)包括0,不包括1的隨機小數。

int d = (int)(Math.random()*10+1);//1到10之間的隨機整數。


---------------------- android培訓java培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章