泛型與map


泛型:主要為了解決程序中裝箱和拆箱的問題:
    裝箱: 值類型-->引用類型  Object obj=1;
    拆箱: 引用類型--->值類型  int number=(int)obj;

.自定義泛型接口、泛型類和泛型方法

從上面的內容中,大家已經明白了泛型的具體運作過程。也知道了接口、類和方法也都可以使用泛型去定義,以及相應的使用。是的,在具體使用時,可以分為泛型接口、泛型類和泛型方法。

自定義泛型接口、泛型類和泛型方法與上述Java源碼中的List、ArrayList類似。如下,我們看一個最簡單的泛型類和方法定義:

public class GenericTest { public static void main(String[] args) { Box<String> name = new Box<String>("corn"); System.out.println("name:" + name.getData()); } } class Box<T> { private T data; public Box() { } public Box(T data) { this.data = data; } public T getData() { return data; } }

在泛型接口、泛型類和泛型方法的定義過程中,我們常見的如T、E、K、V等形式的參數常用於表示泛型形參,由於接收來自外部使用時候傳入的類型實參。那么對於不同傳入的類型實參,生成的相應對象實例的類型是不是一樣的呢?

public class GenericTest { public static void main(String[] args) { Box<String> name = new Box<String>("corn"); Box<Integer> age = new Box<Integer>(712); System.out.println("name class:" + name.getClass());      // com.qqyumidi.Box
        System.out.println("age class:" + age.getClass());        // com.qqyumidi.Box
        System.out.println(name.getClass() == age.getClass());    // true
 } }

        由此,我們發現,在使用泛型類時,雖然傳入了不同的泛型實參,但並沒有真正意義上生成不同的類型,傳入不同泛型實參的泛型類在內存上只有一個,即還是原來的最基本的類型(本實例中為Box),當然,在邏輯上我們可以理解成多個不同的泛型類型。

究其原因,在於Java中的泛型這一概念提出的目的,導致其只是作用於代碼編譯階段,在編譯過程中,對於正確檢驗泛型結果后,會將泛型的相關信息擦出,也就是說,成功編譯過后的class文件中是不包含任何泛型信息的。泛型信息不會進入到運行時階段。

對此總結成一句話:泛型類型在邏輯上看以看成是多個不同的類型,實際上都是相同的基本類型。

如果集合設置為了泛型:只能存儲泛型變量及其子類。

map

Map:key-value 的鍵值對,key 不允許重復,value 可以

  1、嚴格來說 Map 並不是一個集合,而是兩個集合之間 的映射關系。

    2、這兩個集合沒每一條數據通過映射關系,我們可以看成是一條數據。即 Entry(key,value)。Map 可以看成是由多個 Entry 組成。

    3、因為 Map 集合即沒有實現於 Collection 接口,也沒有實現 Iterable 接口,所以不能對 Map 集合進行 for-each 遍歷

        最常用的實用類是HashMap

       map接口常用方法:

 1 public class MapText {  2     public static void main(String[] args) {  3         Map<String,String > map =  new HashMap<String ,String>();  4         map.put("1", "張飛");  5         map.put("2", "說書人");  6         map.put("3", "全聚德");  7         map.put("4","斗魚");  8         map.put("5", "一醉千里");  9         System.out.println("key值為:1的用戶"+map.get("1"));//通過key獲取值 10         //通過key刪除鍵值對
11         map.remove("1"); 12         //maps中的鍵值對個數
13  System.out.println(map.size()); 14         System.out.println(map.containsKey("1")); 15                 //判斷該Key在集合中是否存在 16         //containsValue:判斷值是否存在 17         
18         //1:僅遍歷key
19         Set<String> keySet = map.keySet(); 20         for (String object : keySet) { 21             System.out.println("集合中的key:"+object); 22  } 23         
24         //2:僅遍歷value
25         Collection<String> values = map.values(); 26         for(String item:values){ 27             System.out.println("集合中的value:"+item); 28  } 29         
30         //3:key和value同時遍歷 Entry:
31         Set<Entry<String,String>> entrySet = map.entrySet(); 32         for (Entry<String,String> entry : entrySet) { 33             System.out.println("key:"+entry.getKey()                  +",Value:"+entry.getValue()); 34             
35  } 36  } 37 }


Map接口

  • Map提供了一種映射關系,其中的元素是以鍵值對(key-value)的形式存儲的,能夠實現根據key快速查找value;
  • Map中的鍵值對以Entry類型的對象實例形式存在;
  • 建(key值)不可重復,value值可以重復,一個value值可以和很多key值形成對應關系,每個建最多只能映射到一個值。
  • Map支持泛型,形式如:Map<K,V>
  • Map中使用put(K key,V value)方法添加


HashMap類

 

  • HashMap是Map的一個重要實現類,也是最常用的,基於哈希表實現
  • HashMap中的Entry對象是無序排列的
  • Key值和value值都可以為null,但是一個HashMap只能有一個key值為null的映射(key值不可重復)

 

Map的遍歷方法

       1、迭代器Iteraor

       2、增強型for循環

       3、通過鍵——值 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM