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

返回结果:

[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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值