`
lc52520
  • 浏览: 368997 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HashMap遍历的两种方式【Z】

    博客分类:
  • java
阅读更多

HashMap遍历的两种方式

第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
    Object key = iter.next();
    Object val = map.get(key);
}
效率低,以后尽量少使用!

例:
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:

public class HashMapTest {
public static void main(String[] args) ...{
  HashMap hashmap = new HashMap();
  for (int i = 0; i < 1000; i ) ...{
   hashmap.put("" i, "thanks");
  }

  long bs = Calendar.getInstance().getTimeInMillis();
  Iterator iterator = hashmap.keySet().iterator();  
  while (iterator.hasNext()) ...{   
   System.out.print(hashmap.get(iterator.next()));
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
  listHashMap();
}

  public static void listHashMap() ...{
  java.util.HashMap hashmap = new java.util.HashMap();
  for (int i = 0; i < 1000; i ) ...{
   hashmap.put("" i, "thanks");
  }
  long bs = Calendar.getInstance().getTimeInMillis();  
  java.util.Iterator it = hashmap.entrySet().iterator();
  while (it.hasNext()) ...{
   java.util.Map.Entry entry = (java.util.Map.Entry) it.next();
   // entry.getKey() 返回与此项对应的键
   // entry.getValue() 返回与此项对应的值
   System.out.print(entry.getValue());
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
}
}

对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。

分享到:
评论
1 楼 netwelfare 2015-07-07  
个人感觉,文章对HashMap的遍历分析的有点浅,不如这里的介绍:《HashMap两种遍历方式的深入研究》

相关推荐

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    例如,两个线程同时尝试扩容HashMap,可能会导致某些元素丢失或者被错误地放置到新的bucket中。 3. **死循环(死锁)**:在极端情况下,由于HashMap的迭代器依赖于table的状态,如果在迭代过程中table结构发生变化...

    TreeNode-SourceCode.7z

    这使得`TreeNode`可以在`HashMap`遍历和其他操作中无缝工作。 在实际编程中,了解`TreeNode`的实现细节可以帮助我们更好地理解和优化`HashMap`的性能。例如,当我们处理大量数据时,理解何时会触发红黑树转换,以及...

    ocjp认证,1z0-808题库(中英)+解析.rar

    这个压缩包包含的资源是针对这个考试的题库,分为中文和英文两种版本,并且附带了解析,非常适合准备OCJP认证的考生进行复习和自我测试。 1. **Java基础知识**:1Z0-808考试会覆盖Java语言的基础概念,如数据类型、...

    java组装树形结构demo.7z

    在Java编程中,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状关系,如文件系统、组织架构等。树形结构由节点(或称为对象)组成,每个节点可以有零个或多个子节点,形成层级关系。在本案例中,"java...

    Android ListView城市列表,按a-z分组字母索引排序

    重写Adapter的方法如getViewTypeCount()、getItemViewType(int position)、getView(int position, View convertView, ViewGroup parent)等,以处理这两种不同类型的视图。 4. **Header视图**:在ListView中插入...

    平衡二叉树c++模版

    平衡二叉树是一种特殊类型的二叉树,它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这种数据结构的主要目的是为了保持数据的平衡分布,从而保证在插入、删除和查找操作中的效率。 ...

    泛型和集合案例.7z

    ArrayList和LinkedList是两种常见的List实现。 2. Set:无序且不允许重复元素的集合。HashSet、LinkedHashSet和TreeSet提供了不同的性能和排序特性。 3. Map:存储键值对的集合。HashMap、LinkedHashMap和TreeMap...

    android-sqlite.7z

    Cursor是SQLite数据库查询结果的游标,它提供了一种遍历查询结果的方式。通过moveToFirst()、moveToNext()等方法移动游标,利用getColumnIndex()获取列索引,通过getString()、getInt()等方法获取指定列的数据。 五...

    中兴软件笔试题

    Hashtable是线程安全的,不允许null键和null值,且两者遍历顺序不同,HashMap的遍历顺序不固定,而Hashtable的遍历顺序基于插入顺序或哈希码。 8. **创建类描述点**:可以创建一个名为`Point`的类,包含两个私有...

    Java数据结构和算法

    栈(Stack)和队列(Queue)是两种常见的线性数据结构。栈遵循“后进先出”(LIFO)原则,常用操作是压栈(push)和弹栈(pop)。队列则遵循“先进先出”(FIFO)原则,常用操作是入队(enqueue)和出队(dequeue)...

    Java面试题7道,包含5道理论题和2道编程题

    Java 面试题 7 道,包含 5 道理论题和 2 道编程题 本资源摘要信息将从给定...然后使用两个指针,一个从开始遍历,另一个从结尾遍历,比较它们之间的字符是否相同。如果所有字符都相同,则返回 true,否则返回 false。

    Java-20170831T073021Z-001_java_Javabasicbook_

    2. **ArrayList与LinkedList**:两种常见的List实现,ArrayList基于动态数组,适合随机访问;LinkedList基于链表,适合插入和删除。 3. **HashSet与HashMap**:无序且不允许重复的Set和Key-Value对的Map,理解其...

    android仿qq分组列表效果

    可以通过重写`getViewTypeCount()`和`getItemViewType(int position)`方法来区分这两种类型,并在`getView()`方法中根据类型创建对应的视图。 3. 分组标题视图: 分组标题通常需要设置为可点击的,以便用户可以...

    Java开发工程师试卷九(~).doc

    4. **XML解析**:XML解析主要有DOM、SAX和StAX三种方式,DOM一次性加载整个文档,适合小文档;SAX事件驱动,按需读取,适合大文档;StAX流式解析,介于两者之间。 **主观分析题** 1. **经济亏损问题**:店主实际...

    矩阵方格中求两点之间的最短路径java版

    在IT领域,尤其是在图形算法和数据结构中,求解两点之间的最短路径是一个经典问题。本问题中的场景是在一个7*5的矩阵方格中,角色A需要从起点出发到达终点B,同时需要避开障碍物(标记为球)。移动规则是A只能向周围...

    Java_A-Z

    - **Thread类和Runnable接口**:创建线程的两种方式。 - **线程同步机制**:包括synchronized关键字、wait/notify、Lock接口(如ReentrantLock)等,防止并发访问冲突。 6. **输入输出流** - **File类**:处理...

    中兴软创笔试题目(2010)

    - **链表节点操作**:对于链表的遍历和查找操作,通常会设计递归或循环的方式实现。 - **示例**:`bool test(Node* phead, Node* node) { ... }` ### Java知识点 #### 数据类型与运算 - **短整型运算**:在Java中...

    javaSE_java_core.docx

    在Java中,正则表达式是一种强大的文本处理工具,常用于字符串的匹配、分割和替换。例如,`[abc]`表示匹配字符'a'、'b'或'c';`[a-z]`表示任何小写字母;`[0-9]`代表任何数字。`?`、`*`和`{n}`是量词,分别表示0或1...

Global site tag (gtag.js) - Google Analytics