Java基礎知識_Map_collection其他

</pre><h1>一、Map</h1><p> </p><h2>(一)Map概述</h2><p> </p><p><strong>接口 Map<K,V></strong></p><p align="left"><strong>類型參數:</strong></p><p align="left">K - 此映射所維護的鍵的類型</p><p align="left">V - 映射值的類型</p><p>將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。</p><table border="1" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td colspan="2" style="background:#CCCCFF"><p align="left"><strong>嵌套類摘要</strong></p></td></tr><tr><td valign="top"><p align="right">static interface</p></td><td><p align="left"><strong><a target=_blank href="file:///D:/JDK%20API/api/java/util/Map.Entry.html" title="java.util 中的接口">Map.Entry</a><<a target=_blank href="file:///D:/JDK%20API/api/java/util/Map.Entry.html" title="Map.Entry 中的類型參數">K</a>,<a target=_blank href="file:///D:/JDK%20API/api/java/util/Map.Entry.html" title="Map.Entry 中的類型參數">V</a>></strong> 映射項(鍵-值對)。</p></td></tr></tbody></table><p>Map</p><p>       |--Hashtable:底層是哈希表數據結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。</p><p>       |--HashMap:底層是哈希表數據結構,允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。</p><p>       |--TreeMap:底層是二叉樹數據結構。線程不同步。可以用於給map集合中的鍵進行排序。</p><p> </p><p> </p><p>和Set很像。</p><p>其實,Set底層就是使用了Map集合。</p><p> </p><h2>(二)共性方法</h2><p>1,添加。</p><p>              put(Kkey, V value) </p><p>              putAll(Map<?extends K,? extends V> m) </p><p> </p><p>       2,刪除。</p><p>              clear()</p><p>              remove(Objectkey) </p><p> </p><p>       3,判斷。</p><p>              containsValue(Objectvalue) </p><p>              containsKey(Objectkey) </p><p>              isEmpty()</p><p> </p><p> </p><p>       4,獲取。</p><p>              get(Objectkey) </p><p>              size()</p><p>              values()</p><p> </p><p>              entrySet()</p><p>              keySet()</p><p> </p><p> </p><h2>(三)自練</h2><p></p><pre name="code" class="java">import java.util.*;
 
/*
 
需求:用Map接口的子類對象演示Map的共性方法
 
*/
 
 
class MapDemo
{
       publicstatic void main(String[] args)
       {
              Map<String,Integer>hm = new HashMap<String,Integer>();
             
              hm.put("zhangsan4",14);
              hm.put("zhangsan",11);
              hm.put("zhangsan3",13);
 
              hm.put("zhangsan2",12);
              hm.put("zhangsan2",16);//兩次輸出鍵重複,之前的數據被覆蓋
 
              sop(hm);
 
              //判斷是否包含鍵或值
              sop(hm.containsKey("zhangsan3"));//true
              sop(hm.containsValue(33));//false
 
              //獲取
              sop(hm.get("zhangsan4"));
 
              //刪除
              sop(hm.remove("zhangsan4"));//通過鍵刪除映射關係
 
              sop(hm);
 
              //獲取Map集合中的所有值,並將其返回到Collection對象中
              Collection<Integer>coll = hm.values();
 
              sop(coll);
 
       }
 
       publicstatic void sop(Object obj)
       {
              System.out.println(obj);
       }
}
 


 

(四)Map集合的兩種取出方式

 

第一種Set<k>keySet:

將map中所有的鍵存入到Set集合。因爲set具備迭代器。

所有可以迭代方式取出所有的鍵,在根據get方法。獲取每一個鍵對應的值。

 

import java.util.*;
/*
 
需求:用Map第一種取出方式keySet取出Map集合中的鍵值
 
*/
 
class KeySetDemo
{
       publicstatic void main(String[] args)
       {
              Map<Integer,String>hm = new HashMap<Integer,String>();
             
              hm.put(14,"zhangsan4");
              hm.put(11,"zhangsan");
              hm.put(13,"zhangsan3");
              hm.put(12,"zhangsan2");
              hm.put(16,"zhangsan5");
 
             
 
              Set<Integer>ks = hm.keySet();
 
              sop(ks);
 
              Iterator<Integer>it = ks.iterator();
 
              while(it.hasNext())
              {
                     Integerkey = it.next();
                     sop("key:"+ key + " value:" + hm.get(key));
              }
 
 
 
       }
 
       publicstatic void sop(Object obj)
       {
              System.out.println(obj);
       }
}           


 

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

 

第二種Set<Map.Entry<k,v>>entrySet:

將map集合中的映射關係存入到了set集合中,而這個關係的數據類型就是:Map.Entry

 

Entry其實就是Map中的一個static內部接口。

爲什麼要定義在內部呢?

因爲只有有了Map集合,有了鍵值對,纔會有鍵值的映射關係。

關係屬於Map集合中的一個內部事物。

而且該事物在直接訪問Map集合中的元素。

 

import java.util.*;
/*
 
需求:使用第二種取出方式取出所有元素
 
*/
 
class EntrySetDemo
{
       publicstatic void main(String[] args)
       {
              Map<Integer,String>hm = new HashMap<Integer,String>();
             
              hm.put(14,"zhangsan4");
              hm.put(11,"zhangsan");
              hm.put(13,"zhangsan3");
              hm.put(12,"zhangsan2");
              hm.put(16,"zhangsan5");
 
             
 
              Set<Map.Entry<Integer,String>>entrySet = hm.entrySet();
 
              Iterator<Map.Entry<Integer,String>>it = entrySet.iterator();
 
              while(it.hasNext())
              {
                     Map.Entry<Integer,String>me = it.next();
 
                     Integerkey = me.getKey();
                     Stringvalue = me.getValue();
                    
                     sop("key:"+ key + " value:" + value);
              }
       }
 
       publicstatic void sop(Object obj)
       {
              System.out.println(obj);
       }
}
 


============================================================

二Hashtable

此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 null 對象都可以用作鍵或值。

爲了成功地在哈希表中存儲和獲取對象,用作的對象必須實現 hashCode 方法和 equals 方法

 

下面這個示例創建了一個數字的哈希表。它將數字的名稱用作鍵:

   Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);

要獲取一個數字,可以使用以下代碼:

   Integer n = numbers.get("two");
     if (n != null) {
         System.out.println("two = " + n);
     }
   }


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