天天看點

java集合常用的幾個方法

下面通過例子看看:

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

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

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

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

Collection<String> collection = map.values();//傳回值是個值的Collection集合

System.out.println(collection);

列印結果:

[zhangsan, lisi, wangwu]

或者

 Map map = new HashMap();

      Collection c = map.values();

      Iterator iterator = c.iterator();

      while(iterator.hasNext()) {

             Object value = iterator.next(); 

     }

Set<K> keySet() //傳回值是個隻存放key值的Set集合(集合中無序存放的)

Set<Map.Entry<K,V>> entrySet() //傳回映射所包含的映射關系的Set集合(一個關系就是一個鍵-值對),就是把(key-value)作為一個整體一對一對地存放到Set集合當中的。

一. keySet()方式。

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

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

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

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

        Set<String> keySet = map.keySet();//先擷取map集合的所有鍵的Set集合

        Iterator<String> it = keySet.iterator();//有了Set集合,就可以擷取其疊代器。

        while(it.hasNext()){

                String key = it.next();

                String value = map.get(key);//有了鍵可以通過map集合的get方法擷取其對應的值。

                System.out.println("key: "+key+"-->value: "+value);//獲得key和value值

                }

二. entrySet()方式:

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

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

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

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

//通過entrySet()方法将map集合中的映射關系取出(這個關系就是Map.Entry類型)

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

//将關系集合entrySet進行疊代,存放到疊代器中                

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

while(it2.hasNext()){

        Map.Entry<String, String> me = it2.next();//擷取Map.Entry關系對象me

        String key2 = me.getKey();//通過關系對象擷取key

        String value2 = me.getValue();//通過關系對象擷取value

        System.out.println("key: "+key2+"-->value: "+value2);

}

雖然使用keyset及entryset來進行周遊能取得相同的結果

但兩者的周遊速度是有差别的

keySet():疊代後隻能通過get()取key 

entrySet():疊代後可以e.getKey(),e.getValue()取key和value。傳回的是Entry接口 

說明:keySet()的速度比entrySet()慢了很多,也就是keySet方式周遊Map的性能不如entrySet性能好

為了提高性能,以後多考慮用entrySet()方式來進行周遊。

至于Map的三個易混淆:

HashMap,LinkedHashMap,TreeMap都屬于Map;Map 主要用于存儲鍵(key)值(value)對,根據鍵得到值,是以鍵不允許鍵重複,但允許值重複。  

不同點:

1.HashMap裡面存入的鍵值對在取出的時候是随機的,也是我們最常用的一個Map.它根據鍵的HashCode值存儲資料,根據鍵可以直接擷取它的值,具有很快的通路速度。在Map 中插入、删除和定位元素,HashMap 是最好的選擇。  

2.TreeMap取出來的是排序後的鍵值對。但如果您要按自然順序或自定義順序周遊鍵,那麼TreeMap會更好。  

3. LinkedHashMap 是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那麼用LinkedHashMap可以實作.  (應用場景:購物車等需要順序的)

代碼執行個體:

[java]  view plain  copy  print ?

  1. package com.alibaba.sample.petstore.web.store.module.screen;  
  2. import java.util.HashMap;  
  3. import java.util.Iterator;  
  4. import java.util.LinkedHashMap;  
  5. import java.util.Map;  
  6. import java.util.Map.Entry;  
  7. import java.util.TreeMap;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. public class ViewCart {  
  11.     @Autowired  
  12.     private HttpServletResponse response;  
  13.     public void execute() throws Exception {  
  14.         this.useHashMap();      
  15.         this.useTreeMap();  
  16.         this.useLikedHashMap();   
  17.     }  
  18.     public void useHashMap() throws Exception {      
  19.         response.getWriter().println("------無序(随機輸出)------");  
  20.         Map<String, String> map = new HashMap<String, String>();      
  21.         map.put("1", "Level 1");      
  22.         map.put("2", "Level 2");      
  23.         map.put("3", "Level 3");      
  24.         map.put("a", "Level a");      
  25.         map.put("b", "Level b");      
  26.         map.put("c", "Level c");  
  27.         Iterator<Entry<String, String>> it = map.entrySet().iterator();      
  28.         while (it.hasNext()) {       
  29.             Entry<String, String> e = it.next();       
  30.             response.getWriter().println("Key: " + e.getKey() + ";   Value: "       + e.getValue());      
  31.         }  
  32.     }  
  33.     // 有序(預設排序,不能指定)   
  34.     public void useTreeMap() throws Exception {      
  35.         response.getWriter().println("------有序(但是按預設順充,不能指定)------");      
  36.         Map<String, String> map = new TreeMap<String, String>();      
  37.         map.put("1", "Level 1");      
  38.         map.put("2", "Level 2");      
  39.         map.put("3", "Level 3");      
  40.         map.put("a", "Level a");      
  41.         map.put("b", "Level b");      
  42.         map.put("c", "Level c");      
  43.         Iterator<Entry<String, String>> it = map.entrySet().iterator();      
  44.         while (it.hasNext()) {       
  45.             Entry<String, String> e = it.next();       
  46.             response.getWriter().println("Key: " + e.getKey() + ";   Value: "       + e.getValue());      
  47.         }  
  48.     }  
  49.     public void useLikedHashMap() throws Exception {      
  50.         response.getWriter().println("------有序(根據輸入的順序輸出)------");      
  51.         Map<String, String> map = new LinkedHashMap<String, String>();      
  52.         map.put("1", "Level 1");      
  53.         map.put("2", "Level 2");      
  54.         map.put("3", "Level 3");      
  55.         map.put("a", "Level a");      
  56.         map.put("b", "Level b");      
  57.         map.put("c", "Level c");  
  58.         Iterator<Entry<String, String>> it = map.entrySet().iterator();      
  59.         while (it.hasNext()) {       
  60.             Entry<String, String> e = it.next();       
  61.             response.getWriter().println("Key: " + e.getKey() + ";   Value: "       + e.getValue());      
  62.         }  
  63.     }  
  64. }  

傳回結果:

[html]  view plain  copy  print ?

  1. ------無序(随機輸出)------  
  2. Key: 3;   Value: Level 3  
  3. Key: 2;   Value: Level 2  
  4. Key: 1;   Value: Level 1  
  5. Key: b;   Value: Level b  
  6. Key: c;   Value: Level c  
  7. Key: a;   Value: Level a  
  8. ------有序(但是按預設順充,不能指定)------  
  9. Key: 1;   Value: Level 1  
  10. Key: 2;   Value: Level 2  
  11. Key: 3;   Value: Level 3  
  12. Key: a;   Value: Level a  
  13. Key: b;   Value: Level b  
  14. Key: c;   Value: Level c  
  15. ------有序(根據輸入的順序輸出)------  
  16. Key: 1;   Value: Level 1  
  17. Key: 2;   Value: Level 2  
  18. Key: 3;   Value: Level 3  
  19. Key: a;   Value: Level a  
  20. Key: b;   Value: Level b  
  21. Key: c;   Value: Level c