# 有一个有趣的需求:

(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的优化的更多相关文章

  1. 记一次简单的UITableView卡顿优化

    先说需求,要做一个类似这种的列表 标签控件直接用的第三方 YZTagList 不知道的可以去搜一下,当这不重要. 重要的是这个控件加载数据的时候非常影响列表滑动效果,造成卡顿,尤其是列表行数如果更多的 ...

  2. 性能测试——记XX银行保全项目性能问题分析优化

    记XX银行保全项目性能问题分析优化 数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点. ...

  3. ASP.NET CORE 边学边记之 SwaggerUI简单配置

    前言 当使用 ASP.NET CORE 开发WebApi程序时候,一般使用SwaggerUI生成接口文档.本文记录最简单的一个配置.(生成的文档无注释) 操作 首先安装Nuget包. 然后在Start ...

  4. 记一次简单的Oracle离线数据迁移至TiDB过程

    背景 最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式 ...

  5. 记一次简单的SQL优化

    原来的sql是这样写的 SELECT d.ONSALE_BARCODE, d.ONSALE_NAME, c.ONSALE_ID, CAST( , ) ) AS CUSTOMARY_PRICE, CAS ...

  6. 记一次简单的PHP代码审计(SSRF案例)

    题目链接: http://oj.momomoxiaoxi.com:9090/ 用dirsearch对网址进行扫描,发现robots.txt 命令行: python3 dirsearch.py -u & ...

  7. 记一次简单的GetShell案例

    案例链接: http://202.112.51.184:8007/ 打开链接,发现分了多个页面: 挨个点击,大概清楚是上传指定格式的文件然后在搜索的时候使文件执行从而GetShell,观察发现点击每个 ...

  8. 记一次简单的sql注入

     什么是sql注入攻击?  所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...

  9. 记一次简单爬虫(豆瓣/dytt)

    磕磕绊绊学python一个月,这次到正则表达式终于能写点有趣的东西,在此作个记录: ————————————————————————————————————————————————— 1.爬取豆瓣电影 ...

随机推荐

  1. Javascript 的addEventListener()及attachEvent()对比

    Mozilla中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target: 文档节点.d ...

  2. CodeForces 499D. Name That Tune(概率dp)

    It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the followi ...

  3. CF869C The Intriguing Obsession(组合数学瞎搞,O(n)莫名过)

    — This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, Onii ...

  4. 再次学习linux文件特殊权限:SUID、SGID、Sticy Bit

    以前对于文件管理的认识只限于UGO的管理,对于特殊权限的学习还是一知半解.重新学习了一遍,我自己理解的东东记录一下. 首先,列一下SUID.SGID.Sticy Bit所代表的权限数值.就好像rwx分 ...

  5. add以及update

    const addressData = { name: this.post('name'), mobile: this.post('mobile'), province_id: this.post(' ...

  6. NYTimes Objective-C 编程风格指南

    转自eseedo的博客   [微博] NYTimes Objective-C 编程风格指南.来源:https://github.com/NYTimes/objective-c-style-guide ...

  7. C++对象在内存中的布局

    (1)C++对象模型 (2)单一继承无虚函数 (3)单一继承有虚函数 (4)多重继承 (5)虚拟继承(vc++) (6)虚拟继承(g++) 参考:<深度探索C++对象模型>

  8. input获取焦点软键盘弹出影响定位

    解决移动端底部fixed和input获取焦点软键盘弹出影响定位的问题$(document).ready(function() {                                var ...

  9. ES6——数据结构Set

    数据结构 Set 集合的基本概念: 集合是由一组无序且唯一(即不能重复)的xiang组成的.这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中. 特点: key和 value 相同, ...

  10. C# 获取唯一数字

    /// <summary> /// 如果你想生成一个数字序列而不是字符串,你将会获得一个19位长的序列.下面的方法会把GUID转换为Int64的数字序列. /// </summary ...