java-集合下《五》

來源:互聯網
上載者:User

標籤:collection   java   object   

1.Map 介面

    實現Map介面的集合類是通過"鍵-值"映射的方式來儲存物件的。

   "鍵-值"映射對是通過鍵來唯一標識,Map底層的"鍵"是用Set存放的(這就保證了它的唯一性,不重複)。

   將鍵映射到值的對象。一個映射不能包含重複的鍵,每個鍵最多隻能映射到一個值。

   JDK API中Map介面的實作類別常用的有:1,HashMap 2, TreeMap 3,HashTable(不常用)

   注意:鍵和值都可以為null,但是鍵不能夠重複,值可以重複

2.Map介面中常用的方法

   Object  put (Object key, Object value) ; //將指定的“鍵—值”對存入Map中

   注意:由於key的唯一性,如果再放入相同的key的索引值對,則該索引值對會覆蓋原來的

   Object  get (Object key); //通過key(鍵)取出所映射的值

   Object  remove(Object key); //根據指定的"鍵"將其“鍵-值”對從map中刪除。

   boolean containsKey(Object key); //判斷Map是否包含指定鍵的“鍵-值”對

   boolean containsValue(Object value) ;//判斷Map是否包含指定值的“鍵-值”對

   boolean isEmpty(); //判斷Map是否包含元素

   int size(); //擷取長度

   void clear(); //清空Map中的所有“鍵-值”對

   Set  keySet() ;//返回Map中所包含鍵的set集

   Collection values(); //返回Map中所有的values的集合。

3.HashMap

   HashMap內部對“鍵”用Set進行散列存放(HashSet),所以根據“鍵”去取"值"的效率很高

4.TreeMap

   TreeMap內部對"鍵"用TreeSet的紅/黑樹狀結構結構進行排序存放,所以放入TreeMap的"key-value"對的key

   必須是可"排序"的。

5.Map.Entry 介面

  Map.Entry是Map內部定義的一個介面,專門用來存放key-value的內容。

6.Collections工具類(與Collection<E>不同)

   java.util.Collections 類是操作集合的工具類,提供一些靜態方法實現基於集合的一些常用演算法。

   void sort (List list)  ;//List列表的所有元素必須都實現comparable介面,根據元素的自然順序按升序排列

   void shuffle (List list) ;//對List列表裡的元素()隨機排列。

   void reverse(List list) ;//對List列表裡的元素反轉。

   void copy(List dest ,List src);//src複製到dest中

   void swap(List<?> list,int i,int j) ;//交換列表指定位置的元素

   int   binarySearch(List <? extends T> list,T key); //尋找列表中某元素的位置,前提是已排序

   元素 max(Collection<? extends ?> coll) ;//根據元素的自然順序,返回給定collection中的最大元素

   List  synchronizedList(List List) ;//返回指定列表支援的同步列表

   注意:Collections:對集合進行操作的工具類,裡面都是靜態方法.
            Arrays:對數組進行操作的工具類,裡面都是靜態方法.

7.HashTable

   舊版的HashTable ,操作大多跟HashMap相同。但是它保證線程的同步。

   它有一個子類Properties(屬性集)比較常用:

  • Properties 類表示了一個持久的屬性集。Properties 可儲存在流中或從流中載入。屬性集中每個鍵及其對應值都是一個字串。

  • 不建議使用put 和putAll 這類存放元素方法,應該使用setProperty(Stringkey, Stringvalue)方法,

  • 因為存放的“鍵-值”對都是字串。類似取值也應該使用getProperty(Stringkey)

  • 不支援泛型操作

//Properties樣本,根目錄下要存在config.properties檔案import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiesTest {public static void main(String[] args) {//方法鏈InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");Properties prop = new Properties();try {prop.load(is);} catch (IOException e) {e.printStackTrace();}String name = prop.getProperty("name");String pwd = prop.getProperty("pwd");System.out.println(name + ", " + pwd);}}

8.Map介面輸出

     1,Set<k> keySet:將map中所有的鍵存入到Set集合。因為set具備迭代器。
         所有可以迭代方式取出所有的鍵,在根據get方法。擷取每一個鍵對應的值。

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

     2,Set<Map.Entry<k,v>> entrySet:將map集合中的映射關係存入到了set集合中,
          而這個關係的資料類型就是:Map.Entry

          Entry其實就是Map中的一個static內部介面。
          為什麼要定義在內部呢?
          因為只有有了Map集合,有了索引值對,才會有索引值的映射關係。
          關係屬於Map集合中的一個內部事物。
          而且該事物在直接存取Map集合中的元素。

  對於Map介面來說,其本身是不能直接使用迭代進行輸出的,因為Map中的每一個位置存放的是一對值(keyvalue),

  而Iterator中每次只能找到一個值。所以如果非要使用迭代進行輸出的話,要按照以下操作步驟完成:

  1. 將Map的執行個體通過entrySet()方法變為Set介面對象

  2. 通過Set介面執行個體為Iterator執行個體化

  3. 通過Iterator迭代輸出,每個內容都是Map.Entry的對象

  4. 通過Map.Entry進行keyvalue的分離。getKey,getValue

Map<Integer,String> map = new HashMap<Integer,String>();        //添加元素        map.put(1, "bbb");        map.put(2, "aaa");        map.put(2, "eee");//如果鍵相同,則後面的元素會覆蓋前面的元素.        //鍵和值都可以為null,但是鍵不能夠重複.值可以重複.        //遍曆Map         //1:先獲得Map的key集合,再根據鍵獲得值        Set<Integer> set = map.keySet();        //用增強for迴圈        for(Integer i:set){            System.out.println(i+":"+map.get(i));        }        //用Iterator進行遍曆        //2:擷取Map的value集合.但是這個不能擷取鍵.        //3:用索引值關係擷取Map  ,索引值關係儲存在set集合裡.        //Map.Entry是描述Map集合的映射關係.        Set<Map.Entry<Integer, String>> set2 =  map.entrySet();        for(Map.Entry<Integer, String> m:set2){            System.out.println("key:"+m.getKey()+"--value:"+m.getValue());        }

Map大多時候用於尋找,輸出屬於少數操作。

總結:

Map
|--Hashtable:底層是雜湊表資料結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。
|--HashMap:底層是雜湊表資料結構,允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。
|--TreeMap:底層是二叉樹資料結構。線程不同步。可以用於給map集合中的鍵進行排序

選擇標準:
 存放要求
 無序-Set
 有序-List
 “key-value”對-Map
 讀和改的效率
 Hash*-兩者都最高
 Array*-讀快改慢
 Linked*-讀慢改快

 


java-集合下《五》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.