- 浏览: 234613 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (105)
- JFreeChart (3)
- DbUtil (1)
- Struts2 (17)
- Ruby or Rails (4)
- Eclipse插件 (2)
- 英文一角 (2)
- IT生活 (7)
- 社会盘点 (0)
- Maven3 (3)
- Java (17)
- Jquery (12)
- Hibernate (8)
- Ajax (4)
- Oracle (2)
- SSH2 OA项目 (4)
- jsptags分页插件 (1)
- Javascript (4)
- Ubuntu (4)
- java Utils (1)
- JPA (2)
- sitemesh (1)
- Css (1)
- spring (3)
- 杂记 (5)
- Hibernate3连接池的配置 (0)
最新评论
-
天使建站:
http://www.aijquery.cn/Html/bia ...
jQuery获取及设置单选框,多选框,文本框内容 -
zjxkeven:
不错 不知道好不好用
java服务器状态监控实现 -
根号九加一:
能否发一份给我呢 邮箱是 zmh958@qq.com 谢谢! ...
SSH2项目搭建 -
23843492:
能否发一份给我:23843492@qq.com
SSH2项目搭建 -
jiangdaxian2003:
LZ求代码,谢谢,15914380151@139.com
SSH2项目搭建
在做项目的时候有邮件发送方面的业务.对邮件的收发的业务不是很清楚,这几天重点在恶搞JavaMail.邮件系统的开发在一般的项目中都会用到,可以看出这一块的知识点用到的频率很高,所以必须来掌握它.这是老大写的一个邮件接口实现类(项目中的真实代码):
今天在看这段代码的时候我发现了一个小小的问题那就是老大写的这个遍历:
其实这样是没问题的.但我想用entrySet()是不是效率更高一点呢!!!
当然在数据并发量不大的系统上entrySet()的优势并不明显.
这里我也对entrySet(), keySet()的迭代时间做了一个简单的测试,其 entrySet()的遍历速度并不比keySet()的速度快,但在其应用开发中这些小细节一定要知道.
解决方案,这是哪门子解决方案啊!!!还真没看懂,我那个map集合 调用的是add()方法吗???
package com.tq.platform.service.core.impl; import java.util.Iterator; import java.util.Map; import javax.activation.DataSource; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.mail.MailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import com.tq.platform.service.core.MailManager; /** * 邮件接口实现类 * * @author Vincent */ public class MailManagerImpl extends BaseManagerImpl implements MailManager { private MailSender sender; public void setSender(MailSender sender) { this.sender = sender; } public void sendMessage(String from, String[] to, String subject, String content) { sendMessage(from, to, subject, content, null); } public void sendMessage(String from, String[] to, String subject, String content, Map<String, DataSource> attachments) { try { MimeMessage message = ((JavaMailSenderImpl) sender).createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8"); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); if (attachments != null) { for (Iterator<String> iterator = attachments.keySet().iterator(); iterator.hasNext();) { String fileName = iterator.next(); helper.addAttachment(fileName, attachments.get(fileName)); } } ((JavaMailSenderImpl) sender).send(message); } catch (MessagingException e) { e.printStackTrace(); } } }
今天在看这段代码的时候我发现了一个小小的问题那就是老大写的这个遍历:
for (Iterator<String> iterator = attachments.keySet().iterator(); iterator.hasNext();) { String fileName = iterator.next(); helper.addAttachment(fileName, attachments.get(fileName)); }
其实这样是没问题的.但我想用entrySet()是不是效率更高一点呢!!!
for (Iterator<Entry<String, DataSource>> iterator = attachments .entrySet().iterator(); iterator.hasNext();) { Entry<String, DataSource> fileName = iterator.next(); helper.addAttachment(fileName.toString(), attachments.get(fileName)); }
当然在数据并发量不大的系统上entrySet()的优势并不明显.
这里我也对entrySet(), keySet()的迭代时间做了一个简单的测试,其 entrySet()的遍历速度并不比keySet()的速度快,但在其应用开发中这些小细节一定要知道.
/** * @Title: MapTest.java * @Package: cn.tq.java.Test * @Description: TODO(用一句话描述该文件做什么) * @author: 何枫 * @date: 2011-9-8 上午11:14:27 * @version: V1.0 */ package cn.tq.java.Test; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; /** * @Title: MapTest.java * @Package: cn.tq.java.Test * @Description: TODO(用一句话描述该文件做什么) * @author: 何枫 * @date: 2011-9-8 上午11:14:27 * @version: V1.0 */ public class MapTest { /** * @Title: main * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param args 设定文件 * @return void 返回类型 * @throws 测试keySet * ()与entrySet()的迭代时间 keySet():迭代后只能通过get()取key * entrySet():迭代后可以e.getKey(),e.getValue()取key和value.返回的是Entry接口 * 其通过代码的形式验证keySet()的速度比entrySet()慢了很多 */ public static void main(String[] args) { Map<String, String> kmap = new HashMap<String, String>(); Map<String, String> smap = new HashMap<String, String>(); for (int k = 0; k < 100; k++) { kmap.put("" + k, "kmap"); } for (int s = 0; s < 100; s++) { smap.put("" + s, "smap"); } long ctimesStart = Calendar.getInstance().getTimeInMillis(); System.out.println(stimesStart + " " + ctimesStart + " " + dtimesStart); System.out.println("初始化开始时间:" + stimesStart); Iterator<String> ktor = kmap.keySet().iterator(); while (ktor.hasNext()) { System.out.print(ktor.next() + "\t"); } /* * Iterator<Entry<String, String>> stor = smap.entrySet().iterator(); * while(stor.hasNext()){ Entry<String, String> s = stor.next(); * System.out.print(s.getKey()+"\t"); * //System.out.print(stor.next().getKey()+"\t"); } */ long ctimesEnd = Calendar.getInstance().getTimeInMillis(); System.out.print("\n"); System.out.print("初始化结束时间:" + ctimesEnd + "\n"); System.out.print((ctimesEnd - ctimesStart)); } }
评论
2 楼
何枫abc
2011-09-09
scholers 写道
是你的代码里面:
效率低@!因为你遍历之后,在用get方法又产生了此遍历。
JDK里面的源码:get方法:
Java代码
1. public V get(Object key) {
2. if (key == null)
3. return getForNullKey();
4. int hash = hash(key.hashCode());
5. for (Entry<K,V> e = table[indexFor(hash, table.length)];
6. e != null;
7. e = e.next) {
8. Object k;
9. if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
10. return e.value;
11. }
12. return null;
13. }
解决方法(参考):
Java代码
1. for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {
2. mb.add(entry.getValue());
}
参考:
http://scholers.iteye.com/admin/blogs/1107452
helper.addAttachment(fileName.toString(), attachments.get(fileName));
效率低@!因为你遍历之后,在用get方法又产生了此遍历。
JDK里面的源码:get方法:
Java代码
1. public V get(Object key) {
2. if (key == null)
3. return getForNullKey();
4. int hash = hash(key.hashCode());
5. for (Entry<K,V> e = table[indexFor(hash, table.length)];
6. e != null;
7. e = e.next) {
8. Object k;
9. if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
10. return e.value;
11. }
12. return null;
13. }
解决方法(参考):
Java代码
1. for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {
2. mb.add(entry.getValue());
}
参考:
http://scholers.iteye.com/admin/blogs/1107452
解决方案,这是哪门子解决方案啊!!!还真没看懂,我那个map集合 调用的是add()方法吗???
1 楼
scholers
2011-09-08
是你的代码里面:
效率低@!因为你遍历之后,在用get方法又产生了此遍历。
JDK里面的源码:get方法:
Java代码
1. public V get(Object key) {
2. if (key == null)
3. return getForNullKey();
4. int hash = hash(key.hashCode());
5. for (Entry<K,V> e = table[indexFor(hash, table.length)];
6. e != null;
7. e = e.next) {
8. Object k;
9. if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
10. return e.value;
11. }
12. return null;
13. }
解决方法(参考):
Java代码
1. for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {
2. mb.add(entry.getValue());
}
参考:
http://scholers.iteye.com/admin/blogs/1107452
helper.addAttachment(fileName.toString(), attachments.get(fileName));
效率低@!因为你遍历之后,在用get方法又产生了此遍历。
JDK里面的源码:get方法:
Java代码
1. public V get(Object key) {
2. if (key == null)
3. return getForNullKey();
4. int hash = hash(key.hashCode());
5. for (Entry<K,V> e = table[indexFor(hash, table.length)];
6. e != null;
7. e = e.next) {
8. Object k;
9. if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
10. return e.value;
11. }
12. return null;
13. }
解决方法(参考):
Java代码
1. for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {
2. mb.add(entry.getValue());
}
参考:
http://scholers.iteye.com/admin/blogs/1107452
发表评论
-
JUnit4操作步骤及注意事项
2012-06-29 15:20 11945使用jUnit4的操作步骤及� ... -
Struts2与JFreeChart整合
2012-05-28 11:15 1955JFreechart是JAVA平台上的一个开放的图表绘制类库。 ... -
mysql 中文乱码解决办法总结
2012-04-15 12:13 1355mysql 中文乱码解决办法� ... -
jQuery获取及设置单选框,多选框,文本框内容
2012-04-08 16:56 8772在工作中,text,radio,checkbox,select ... -
java那些事
2012-03-12 19:40 1032JAVA编程中尽量要做到的一些地方 1.尽量使用Stri ... -
字符串截取方法总结
2012-03-11 21:57 1312字符串截取 今在jsp页面中截取一段字符显示.项目用的stru ... -
批量处理
2012-03-06 18:16 1254jquery中出现#('#xxxx') is null 的原因 ... -
CKEditor整合CKFinder实现上传
2011-10-31 20:43 6057目前在做的一个项目中要用到文本编辑器,以前用的比较多的是FCk ... -
JavaMail发送邮件
2011-08-23 20:55 1161/** package cn.tq.javamail; ... -
Vector和ArrayList的区别
2011-08-23 20:46 8721.Vector和ArrayList在使用上非常相似,都可用来 ... -
JAP实现方法
2011-05-10 21:13 1168package cn.itcast.service.base; ... -
SVN 签出源码 Struts Spring Hibernate
2011-05-09 15:59 917很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习 ... -
java知识点
2011-03-13 23:56 1032线程指程序执行过程中,能够执行程序代码的一个执行单位,每个程序 ... -
build.xml
2011-02-19 18:12 1094使用Ant+xdoclet来生成Hibernate的配置文件和 ... -
常用程序类(密码加密和字符转码)
2011-01-23 00:31 1215import java.io.UnsupportedEncod ... -
根据Id查询
2011-01-21 11:52 0package com.huawei.action; imp ... -
Tomcat配置JNDI数据源
2011-01-09 14:55 1349Tomcat使用JNDI连接数据库,这里就使用Mysql为例: ...
相关推荐
与`keySet()`不同的是,`entrySet()`允许我们同时访问键和值,而无需额外的`get()`操作。这在性能上通常更优,尤其是在频繁访问键值对的场景下。下面是一个使用`entrySet()`遍历`HashMap`的示例: ```java Map, ...
### Java中遍历Map的四种方式及性能比较 在Java编程中,`Map`是一种非常重要的数据结构,用于存储键值对。对于`Map`的遍历,不同的遍历方式有着不同的性能表现以及适用场景。本文将详细介绍四种常见的遍历`Map`的...
这种方法首先获取`Map`的所有键集合(`keySet`),然后通过迭代器或者增强型for循环(也称为foreach循环)遍历这些键,并使用`get()`方法获取与每个键相对应的值。 **示例代码:** ```java public static void main...
Java中提供了多种Map遍历方式,包括通过获取所有的key、通过Map.entrySet使用iterator遍历、通过Map.entrySet遍历等。 1. 通过获取所有的key遍历 ``` Set<Integer> set = map.keySet(); for (Integer in : map....
Map 遍历是集合操作中的一种重要操作,一般来说,有三种方式来遍历 Map 集合:使用 values() 方法遍历、使用 keySet() 方法遍历和使用 entrySet() 方法遍历。 第一种方法:使用 values() 方法遍历 这个方法是最...
### 性能比较 在上述的`HashMapTest`类中,通过对比`keySet()`和`entrySet()`遍历HashMap的时间,我们可以看到`entrySet()`方法通常比`keySet()`方法更快。`keySet()`需要两次遍历:一次是转换为迭代器,另一次是从...
3. **通过Map.entrySet遍历key和value(增强for循环)** 这种方式与第二种相似,也是遍历entrySet,但使用了Java 5引入的foreach循环,使得代码更加简洁。 ```java for (Map.Entry, String> entry : map.entrySet...
然而,如果Map实现得足够优化,keySet的性能可能会与entrySet相当,甚至在某些情况下优于entrySet。 遍历key或value时,关键在于是否需要同时访问键和值。如果只需要遍历键或值,values方法和keySet的性能可能会...
2. **entrySet遍历** `entrySet()`方法返回一个包含Map所有键值对的Set,通过迭代器或增强for循环遍历。这种方法一次性获取键值对,可以直接访问键和值,例如: ```java for (Entry, Object> entry : map....
这种方法通过`keySet()`获取到所有键组成的集合,然后利用增强for循环遍历每个键,并通过`get()`方法获取对应的值。 #### 四、遍历`Map`的不同方法 接下来,文档详细介绍了四种不同的遍历`Map`的方法: 1. **使用`...
在Java编程中,`Map`接口是集合框架的重要组成部分,用于存储键值对数据。遍历`Map`是常见的操作,可以用来访问或...而entrySet()则在需要同时处理键和值时更为合适,但需要注意性能问题,特别是在大数据量的`Map`中。
使用`Map.keySet()`方法获取HashMap中所有键的`Set`集合,然后通过迭代器遍历这个集合,获取每个键,再通过`map.get(key)`获取对应的值。 ```java for (String key : map.keySet()) { int value = map.get(key)...
今天,我们来讨论一种遍历Map的方式,即使用Map.Entry和Map.entrySet()。 Map.Entry是什么? ---------------- Map.Entry是一个接口,表示一个映射项,里面有Key和Value。它有两个方法:getKey()和getValue(),...
- 使用流API遍历时,虽然代码更简洁,但性能上可能不如传统的迭代器或增强型for循环,尤其是在处理大量数据时。 - `keySet()`方法返回的是键的集合视图,这意味着对返回的`Set`集合的任何修改都会反映到`Map`上,...
HashMap提供了三种循环遍历方式,即for each map.entrySet()、显示调用map.entrySet()的集合迭代器、for each map.keySet()。每种遍历方式都有其特点和优缺势,本文将通过实例分析和性能测试来比较这三种遍历方式的...
与`keySet()`相比,`entrySet()`提供了更全面的访问Map内容的方式,因为一次操作就能同时访问键和值。 在集合的嵌套合并中,我们可能需要将多个Map或其他集合类型的对象合并成一个大的集合。例如,如果我们有两个...
这是最基础的遍历方式,通过获取`Map`的`keySet`,然后用增强型for循环遍历`keySet`,再通过`get()`方法获取对应的`value`。 ```java for (Integer in : map.keySet()) { String str = map.get(in); System.out...
本文将介绍四种遍历Map的方法,分别是通过键值遍历、通过值遍历、通过EntrySet遍历和直接遍历EntrySet。 第一种:通过键值遍历 通过键值遍历是指先获取Map的键值,然后通过键值获取对应的值。这种方法可以通过Map的...