- 浏览: 229909 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 11839使用jUnit4的操作步骤及 ... -
Struts2与JFreeChart整合
2012-05-28 11:15 1845JFreechart是JAVA平台上的一个开放的图表绘制类库。 ... -
mysql 中文乱码解决办法总结
2012-04-15 12:13 1277mysql 中文乱码解决办法 ... -
jQuery获取及设置单选框,多选框,文本框内容
2012-04-08 16:56 8677在工作中,text,radio,checkbox,select ... -
java那些事
2012-03-12 19:40 950JAVA编程中尽量要做到的一些地方 1.尽量使用Stri ... -
字符串截取方法总结
2012-03-11 21:57 1250字符串截取 今在jsp页面中截取一段字符显示.项目用的stru ... -
批量处理
2012-03-06 18:16 1189jquery中出现#('#xxxx') is null 的原因 ... -
CKEditor整合CKFinder实现上传
2011-10-31 20:43 6019目前在做的一个项目中要用到文本编辑器,以前用的比较多的是FCk ... -
JavaMail发送邮件
2011-08-23 20:55 1098/** package cn.tq.javamail; ... -
Vector和ArrayList的区别
2011-08-23 20:46 8231.Vector和ArrayList在使用上非常相似,都可用来 ... -
JAP实现方法
2011-05-10 21:13 1133package cn.itcast.service.base; ... -
SVN 签出源码 Struts Spring Hibernate
2011-05-09 15:59 892很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习 ... -
java知识点
2011-03-13 23:56 993线程指程序执行过程中,能够执行程序代码的一个执行单位,每个程序 ... -
build.xml
2011-02-19 18:12 1052使用Ant+xdoclet来生成Hibernate的配置文件和 ... -
常用程序类(密码加密和字符转码)
2011-01-23 00:31 1185import java.io.UnsupportedEncod ... -
根据Id查询
2011-01-21 11:52 0package com.huawei.action; imp ... -
Tomcat配置JNDI数据源
2011-01-09 14:55 1314Tomcat使用JNDI连接数据库,这里就使用Mysql为例: ...
相关推荐
java,利用keySet进行遍历map
// hashmap entrySet() 遍历 for(Map.Entry<Object,Object> m: hash.entrySet()){ System.out.println(m.getKey()+"---"+m.getValue()); } //hashmap keySet() 遍历 for(Object m: hash....
遍历MAP的几种方法,利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性
对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次...
1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...
可以通过2种方法遍历HashMap <br>Map map = new HashMap(); <br>for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { <br> Map.Entry entry = (Map.Entry) iter.next(); <br> Object ...
此文件是用eclipse打包的,如果用eclipse工具可直接导入查看,如果用的是idea工具,可以打开bin下的.class文件之后,拖入到idea运行即可
python库。 资源全名:django-keyset-pagination-plus-0.9.9.tar.gz
HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP KSV和keyset对应关系介绍HDCP...
NULL 博文链接:https://hoochiang.iteye.com/blog/1816970
java中的map遍历有多种方法,从早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点。 先初始化一个map public class TestMap { public static Map<Integer>...
- KeySet 内部类 - Values 内部类 - EntrySet 内部类 - HashMap 1.7 的底层结构 - HashMap 1.8 的底层结构 - HashMap 重要属性 - HashMap 构造函数 - 讲一讲 HashMap put 的全过程 - Hash 函数 - 扩容机制...
简单地说,在keyset方法返回的set上做修改会改变原来hashmap,这也许不是你想要的,于是形成一个隐藏的bug
主要为大家详细介绍了Java使用keySet方法获取Map集合中的元素,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在用户界面方面,键集分页与无限滚动元素配合得很好。 键集分页可提供稳定的结果。 下一批记录总是从上一批的最后一条记录开始,即使查询之间会有插入或删除。 在SQL 中使用Objection.js 自己的.page()或OFFSET等...
keyset does not exist错误的解决方法
B .NULL与任何值的比较结果都为NULL。 C .NULL<>1的返回结果为true。 D .当某一列的值全是NULL时,sum(col)的返回结果为NULL。 多选 7.关于接口使用抛异常还是返回错误码,下列哪些说法符合《阿里巴巴Java开发...
at net.sf.ehcache.store.disk.DiskStore.keySet(DiskStore.java:560) at net.sf.ehcache.store.disk.DiskStorageFactory$DiskExpiryTask.run(DiskStorageFactory.java:838) at java.util.concurrent.Executors$...
如果当前桶有值( Hash 冲突),那么就要比较当前桶中的 key、key 的 hashcode 与写入的 key 是否相等,相等就赋值给 e,在第 8 步的时候会统一进行赋值及返回。 如果当前桶为红黑树,那就要按照红黑树的方式写入数据...
今天小编就为大家分享一篇关于Java源码解析HashMap的keySet()方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧