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中,所以就快了。
分享到:
相关推荐
例如,两个线程同时尝试扩容HashMap,可能会导致某些元素丢失或者被错误地放置到新的bucket中。 3. **死循环(死锁)**:在极端情况下,由于HashMap的迭代器依赖于table的状态,如果在迭代过程中table结构发生变化...
这使得`TreeNode`可以在`HashMap`遍历和其他操作中无缝工作。 在实际编程中,了解`TreeNode`的实现细节可以帮助我们更好地理解和优化`HashMap`的性能。例如,当我们处理大量数据时,理解何时会触发红黑树转换,以及...
这个压缩包包含的资源是针对这个考试的题库,分为中文和英文两种版本,并且附带了解析,非常适合准备OCJP认证的考生进行复习和自我测试。 1. **Java基础知识**:1Z0-808考试会覆盖Java语言的基础概念,如数据类型、...
在Java编程中,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状关系,如文件系统、组织架构等。树形结构由节点(或称为对象)组成,每个节点可以有零个或多个子节点,形成层级关系。在本案例中,"java...
重写Adapter的方法如getViewTypeCount()、getItemViewType(int position)、getView(int position, View convertView, ViewGroup parent)等,以处理这两种不同类型的视图。 4. **Header视图**:在ListView中插入...
平衡二叉树是一种特殊类型的二叉树,它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这种数据结构的主要目的是为了保持数据的平衡分布,从而保证在插入、删除和查找操作中的效率。 ...
ArrayList和LinkedList是两种常见的List实现。 2. Set:无序且不允许重复元素的集合。HashSet、LinkedHashSet和TreeSet提供了不同的性能和排序特性。 3. Map:存储键值对的集合。HashMap、LinkedHashMap和TreeMap...
Cursor是SQLite数据库查询结果的游标,它提供了一种遍历查询结果的方式。通过moveToFirst()、moveToNext()等方法移动游标,利用getColumnIndex()获取列索引,通过getString()、getInt()等方法获取指定列的数据。 五...
Hashtable是线程安全的,不允许null键和null值,且两者遍历顺序不同,HashMap的遍历顺序不固定,而Hashtable的遍历顺序基于插入顺序或哈希码。 8. **创建类描述点**:可以创建一个名为`Point`的类,包含两个私有...
栈(Stack)和队列(Queue)是两种常见的线性数据结构。栈遵循“后进先出”(LIFO)原则,常用操作是压栈(push)和弹栈(pop)。队列则遵循“先进先出”(FIFO)原则,常用操作是入队(enqueue)和出队(dequeue)...
Java 面试题 7 道,包含 5 道理论题和 2 道编程题 本资源摘要信息将从给定...然后使用两个指针,一个从开始遍历,另一个从结尾遍历,比较它们之间的字符是否相同。如果所有字符都相同,则返回 true,否则返回 false。
2. **ArrayList与LinkedList**:两种常见的List实现,ArrayList基于动态数组,适合随机访问;LinkedList基于链表,适合插入和删除。 3. **HashSet与HashMap**:无序且不允许重复的Set和Key-Value对的Map,理解其...
可以通过重写`getViewTypeCount()`和`getItemViewType(int position)`方法来区分这两种类型,并在`getView()`方法中根据类型创建对应的视图。 3. 分组标题视图: 分组标题通常需要设置为可点击的,以便用户可以...
4. **XML解析**:XML解析主要有DOM、SAX和StAX三种方式,DOM一次性加载整个文档,适合小文档;SAX事件驱动,按需读取,适合大文档;StAX流式解析,介于两者之间。 **主观分析题** 1. **经济亏损问题**:店主实际...
在IT领域,尤其是在图形算法和数据结构中,求解两点之间的最短路径是一个经典问题。本问题中的场景是在一个7*5的矩阵方格中,角色A需要从起点出发到达终点B,同时需要避开障碍物(标记为球)。移动规则是A只能向周围...
- **Thread类和Runnable接口**:创建线程的两种方式。 - **线程同步机制**:包括synchronized关键字、wait/notify、Lock接口(如ReentrantLock)等,防止并发访问冲突。 6. **输入输出流** - **File类**:处理...
- **链表节点操作**:对于链表的遍历和查找操作,通常会设计递归或循环的方式实现。 - **示例**:`bool test(Node* phead, Node* node) { ... }` ### Java知识点 #### 数据类型与运算 - **短整型运算**:在Java中...
在Java中,正则表达式是一种强大的文本处理工具,常用于字符串的匹配、分割和替换。例如,`[abc]`表示匹配字符'a'、'b'或'c';`[a-z]`表示任何小写字母;`[0-9]`代表任何数字。`?`、`*`和`{n}`是量词,分别表示0或1...