记一次简单的关于SimpleDateFormat的优化
# 有一个有趣的需求:
(1)预先定义每天24小时不同时间段的电价
(2) 有一个list<map<timestamp,value>>: timestamp(时间戳);value(耗电量)
(3) 求电价,也就是遍历list, 判断timestamp是哪个电价,然后相乘
## 有趣的地方在于怎么把timestamp转化为只有"HH:mm:ss"的格式(因为电价的定义只有这种格式)
## 方案1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class QQ { public static void main(String[] args) throws ParseException {
Long ts = 1556606641000L;
List<Long> list = new ArrayList<Long>();
for (int i = 0; i < 200000; i++) {
list.add(ts + i);
} Long start = System.currentTimeMillis();
for (Long e : list) {
String str = timestampToStr(e, "HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.parse(str).getTime();
}
System.out.println(System.currentTimeMillis() - start);
} private static String timestampToStr(Long timestamp, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(formatStr);
Date date = new Date(timestamp);
return format.format(date);
}
}
## 上面的代码耗时 1s-1.5s之间(数据量为200000), 结果很不理想
## 方案2
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List; import org.joda.time.LocalTime; public class QQ { public static void main(String[] args) throws ParseException {
Long ts = 1556606641000L;
List<Long> list = new ArrayList<Long>();
for (int i = 0; i < 200000; i++) {
list.add(ts + i);
} Long start = System.currentTimeMillis();
for (Long e : list) {
LocalTime time = new LocalTime(ts);
}
System.out.println(System.currentTimeMillis() - start);
} }
## 耗时200-300ms左右
记一次简单的关于SimpleDateFormat的优化的更多相关文章
- 记一次简单的UITableView卡顿优化
先说需求,要做一个类似这种的列表 标签控件直接用的第三方 YZTagList 不知道的可以去搜一下,当这不重要. 重要的是这个控件加载数据的时候非常影响列表滑动效果,造成卡顿,尤其是列表行数如果更多的 ...
- 性能测试——记XX银行保全项目性能问题分析优化
记XX银行保全项目性能问题分析优化 数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点. ...
- ASP.NET CORE 边学边记之 SwaggerUI简单配置
前言 当使用 ASP.NET CORE 开发WebApi程序时候,一般使用SwaggerUI生成接口文档.本文记录最简单的一个配置.(生成的文档无注释) 操作 首先安装Nuget包. 然后在Start ...
- 记一次简单的Oracle离线数据迁移至TiDB过程
背景 最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式 ...
- 记一次简单的SQL优化
原来的sql是这样写的 SELECT d.ONSALE_BARCODE, d.ONSALE_NAME, c.ONSALE_ID, CAST( , ) ) AS CUSTOMARY_PRICE, CAS ...
- 记一次简单的PHP代码审计(SSRF案例)
题目链接: http://oj.momomoxiaoxi.com:9090/ 用dirsearch对网址进行扫描,发现robots.txt 命令行: python3 dirsearch.py -u & ...
- 记一次简单的GetShell案例
案例链接: http://202.112.51.184:8007/ 打开链接,发现分了多个页面: 挨个点击,大概清楚是上传指定格式的文件然后在搜索的时候使文件执行从而GetShell,观察发现点击每个 ...
- 记一次简单的sql注入
什么是sql注入攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...
- 记一次简单爬虫(豆瓣/dytt)
磕磕绊绊学python一个月,这次到正则表达式终于能写点有趣的东西,在此作个记录: ————————————————————————————————————————————————— 1.爬取豆瓣电影 ...
随机推荐
- javascript事件坐标
clientX 鼠标在页面显示区域的坐标 screenX鼠标在显示屏幕上的坐标 layerX 鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从bo ...
- hbase项目
四.HBase 项目4.1.涉及概念梳理:命名空间4.1.1.命名空间的结构 1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定, 则在 default 默认的命名 ...
- 基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息
简介: 不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源.但是,它的结构使它很难用系统的方法来利用信息.本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所 ...
- 前端技术俗语js
注:原文是英文,本文是我翻译的.有人把我翻译的内容原文照抄,放到他自己的专栏,搞得有人问我是不是我抄袭了……请支持我的劳动成果,花了两个小时翻译的,谢谢.转载请注明译者为方应杭. 嘿,我最近接到一个 ...
- hyper-v开发包之ddtkh
ddtkh是微软开源社区的项目,实质是.net对象封装的一系列powershell命令,在结构上更直观更易用.它集成scvmm虚拟机管理.scom虚拟机资源监控和DPM数据保护等几种功能包.
- 高德地图之c#后台获取一个或多个起点到单个终点的直线距离
首先我们需要一个控制台添加一个新Key(可使用服务选择Web服务,测试的时候IP白名单先不填); 直线距离是通过后台get方式请求API服务地址http://restapi.amap.com/v3/d ...
- sharepoint 2010 GetUserProfileByName 5566
After some further investigation i found that it's actually the "ASP.NET Impersonation" th ...
- sublime 插件安装之sublime highlight 如何优雅拷贝代码到word
首先:打开preference => Package Control,输入 Add Repository ,用它来为Sublime 添加插件安装源, https://github.com/n ...
- leetcode 45. 跳跃游戏 II JAVA
题目: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [2,3,1,1, ...
- [agc004d]Teleporter 暴力
Description 维尼管辖的领土很大,我们可以抽象为n个城市,其中1号点为首都.这n个城市之有n条单向电缆,一条信息经过一条电缆进行传输所需时间会+1s,然而维尼并不能忍受时间白白被续,他要求从 ...