遍历HashMap及获取所有的Key值

Java代码   收藏代码
  1. 遍历HashMap  
  2. HashMap attMap;  
  3. Iterator i = attMap.entrySet().iterator();  
  4. while(i.hasNext()){  
  5. Object o = i.next();  
  6. String key = o.toString();  
  7. //这样就可以遍历该HashMap的key值了。  
  8. }  
  9. 当然也可以遍历Map.Entry项,值。方法类似。  
  10.   
  11.   
  12. 也可以  
  13. Object [] obja=attmap.keySet().toArray();  
  14.   
  15. 听我们的支持说遍历hashmap使用entryset快些,因大部分都是用keyset遍历的,也没有去想那么多。今天研究了一下,果然差了很多。  
  16. 见示例,只是简单的hashmap信息。不多说了,大家把这个类在本地运行下,很容易看到结果。  
  17.   
  18. import java.util.HashMap;  
  19. import java.util.Iterator;  
  20. import java.util.Calendar;  
  21.   
  22. public class HashMapTest {  
  23.   
  24. public static void main(String[] args) {  
  25. HashMap hashmap = new HashMap();  
  26. for(int i=0;i<1000;i++){  
  27. hashmap.put(""+i,"hello");  
  28. }  
  29.   
  30. long bs = Calendar.getInstance().getTimeInMillis();  
  31. Iterator iterator = hashmap.keySet().iterator();  
  32. //String value = "";  
  33. while(iterator.hasNext()) {  
  34. //value = hashmap.get(iterator.next());  
  35. System.out.println(hashmap.get(iterator.next()));  
  36. }  
  37. System.out.println(Calendar.getInstance().getTimeInMillis() - bs);  
  38. listHashMap();  
  39. }  
  40.   
  41. public static void listHashMap(){  
  42. java.util.HashMap hashmap = new java.util.HashMap();  
  43. for(int i=0;i<1000;i++){  
  44. hashmap.put(""+i,"hello");  
  45. }  
  46. long bs = Calendar.getInstance().getTimeInMillis();  
  47. //Set set = hashmap.entrySet() ;  
  48. java.util.Iterator it = hashmap.entrySet().iterator();  
  49. while(it.hasNext()){  
  50. java.util.Map.Entry entry = (java.util.Map.Entry)it.next();  
  51. // entry.getKey() 返回与此项对应的键  
  52. // entry.getValue() 返回与此项对应的值  
  53. System.out.println(entry.getValue());  
  54. }  
  55. System.out.println(Calendar.getInstance().getTimeInMillis() - bs);  
  56. }  
  57.   
  58. }  
  59.   
  60. 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。  
  61.   
  62. 而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。  
  63.   
  64.   
  65. 对于我们做web的,可能不部分都是用vo对象或是form封装信息,所以用到hashmap时,其内存放的都是上面的对象。因此使用entryset遍历性能会有所提高。  
  66.   
  67. hashmap使用很多,比如导入信息时就要用到,因大部分导入的信息要去判断是否有重复的信息,这样就可以利用containsKey来进行处理了,而不用在插入的时候去进行处理。  
  68.   
  69.   
  70.   
  71.   
  72. 第一种:  
  73. Map map = new HashMap();  
  74. Iterator iter = map.entrySet().iterator();  
  75. while (iter.hasNext()) {  
  76.     Map.Entry entry = (Map.Entry) iter.next();  
  77.     Object key = entry.getKey();  
  78.     Object val = entry.getValue();  
  79. }  
  80. 效率高,以后一定要使用此种方式!  
  81. 第二种:  
  82. Map map = new HashMap();  
  83. Iterator iter = map.keySet().iterator();  
  84. while (iter.hasNext()) {  
  85.     Object key = iter.next();  
  86.     Object val = map.get(key);  
  87. }  
  88. 效率低,以后尽量少使用!  
  89.   
  90. 例:  
  91. HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:  
  92.   
  93. public class HashMapTest {  
  94. public static void main(String[] args) ...{  
  95.   HashMap hashmap = new HashMap();  
  96.   for (int i = 0; i < 1000; i ) ...{  
  97.    hashmap.put("" i, "thanks");  
  98.   }  
  99.   
  100.   long bs = Calendar.getInstance().getTimeInMillis();  
  101.   Iterator iterator = hashmap.keySet().iterator();    
  102.   while (iterator.hasNext()) ...{     
  103.    System.out.print(hashmap.get(iterator.next()));  
  104.   }  
  105.   System.out.println();  
  106.   System.out.println(Calendar.getInstance().getTimeInMillis() - bs);  
  107.   listHashMap();  
  108. }  
  109.   
  110.   public static void listHashMap() ...{  
  111.   java.util.HashMap hashmap = new java.util.HashMap();  
  112.   for (int i = 0; i < 1000; i ) ...{  
  113.    hashmap.put("" i, "thanks");  
  114.   }  
  115.   long bs = Calendar.getInstance().getTimeInMillis();    
  116.   java.util.Iterator it = hashmap.entrySet().iterator();  
  117.   while (it.hasNext()) ...{  
  118.    java.util.Map.Entry entry = (java.util.Map.Entry) it.next();  
  119.    // entry.getKey() 返回与此项对应的键  
  120.    // entry.getValue() 返回与此项对应的值  
  121.    System.out.print(entry.getValue());  
  122.   }  
  123.   System.out.println();  
  124.   System.out.println(Calendar.getInstance().getTimeInMillis() - bs);  
  125. }  
  126. }  
  127.   
  128. 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。    
  129.   
  130.    
  131.   
  132. public boolean isOnLine(String email, SocketChannel socket){  
  133.         if (sessionMap.containsKey(email)) {  
  134.             // 更新session数据  
  135.             Session session = sessionMap.get(email);  
  136.             session.updateAll(SessionStatus.ONLINE, socket, new Date().getTime());  
  137.             return true;  
  138.         }  
  139.         // 添加该用户的session数据  
  140.         Session session = new Session(SessionStatus.ONLINE, socket, new Date().getTime());  
  141.         sessionMap.put(email, session);  
  142.         return false;  
  143.     }   

猜你喜欢

转载自collegeyuan.iteye.com/blog/2281660