-
Java中代码的时间复杂度
2018-09-19 22:27:36Java中代码的时间复杂度 四个场景,分别对应了程序中最常见的四种执行方式: 场景1 T(n) = 3n,执行次数是线性的 场景2: T(n) = 5logn,执行次数是对数的 场景3: T(n) = 2,执行次数是常量的 场景4: T...Java中代码的时间复杂度
四个场景,分别对应了程序中最常见的四种执行方式:
场景1
T(n) = 3n,执行次数是线性的
场景2:
T(n) = 5logn,执行次数是对数的
场景3:
T(n) = 2,执行次数是常量的
场景4:
T(n) = 0.5n^2 + 0.5n,执行次数是一个多项式
有了基本操作执行次数的函数 T(n),是否就可以分析和比较一段代码的运行时间了呢?还是有一定的困难。比如算法A的相对时间是T(n)= 100n,算法B的相对时间是T(n)= 5n^2,这两个到底谁的运行时间更长一些?这就要看n的取值了。
所以,这时候有了渐进时间复杂度(asymptotic time complectiy)的概念,官方的定义如下:
若存在函数 f(n),使得当n趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。
记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
渐进时间复杂度用大写O来表示,所以也被称为大O表示法。
如何推导出时间复杂度呢?有如下几个原则:
如果运行时间是常数量级,用常数1表示。
只保留时间函数中的最高阶项
如果最高阶项存在,则省去最高阶项前面的系数。
让我们回头看看刚才的四个场景。
场景1:T(n) = 3n
最高阶项为3n,省去系数3,转化的时间复杂度为:
T(n) = O(n)
场景2:
T(n) = 5logn
最高阶项为5logn,省去系数5,转化的时间复杂度为:
T(n) = O(logn)
场景3:T(n) = 2
只有常数量级,转化的时间复杂度为:
T(n) = O(1)
场景4:T(n) = 0.5n^2 + 0.5n
最高阶项为0.5n^2,省去系数0.5,转化的时间复杂度为:
T(n) = O(n^2)
我们来举过一个例子:
算法A的相对时间规模是T(n)= 100n,时间复杂度是O(n)
算法B的相对时间规模是T(n)= 5n2,时间复杂度是O(n2),
算法A运行在小灰家里的老旧电脑上,算法B运行在某台超级计算机上,运行速度是老旧电脑的100倍。
那么,随着输入规模 n 的增长,两种算法谁运行更快呢?
从表格中可以看出,当n的值很小的时候,算法A的运行用时要远大于算法B;当n的值达到1000左右,算法A和算法B的运行时间已经接近;当n的值越来越大,达到十万、百万时,算法A的优势开始显现,算法B则越来越慢,差距越来越明显。这就是不同时间复杂度带来的差距。
-
Java-n种输出日期和时间的Java代码-java.util.Date用法
2018-10-18 23:32:34输出日期和时间的Java代码-java.util.Date用法 文章目录输出日期和时间的Java代码-java.util.Date用法System.out.println(new java.util.Date());代码图结果System.out.println(new java.util.Date()....输出日期和时间的Java代码-java.util.Date用法
文章目录
System.out.println(new java.util.Date());
代码
System.out.println(new java.util.Date());
图
结果
Wed Oct 17 21:06:51 CST 2018
System.out.println(new java.util.Date().toLocaleString());
代码
System.out.println(new java.util.Date().toLocaleString());
图
会有提示(但是不用管)
结果
2018-10-17 21:06:32
前两个的区别可以看出来吧,第一个的输出结果多了很多英文,有时候不必要的话就可以换成第二个。
前两个已过时,接下来介绍第三个。
DateFormat.format()【重要】
代码
public class Xx1 { public static void main(String[] args) { // TODO 自动生成的方法存根 //日期 //方法1 DateFormat d1 =java.text.DateFormat.getDateInstance(); Date date = new Date(); System.out.println(d1.format(date)); //方法2 DateFormat df = DateFormat.getDateInstance(); // Date date = new Date(); //注释掉这一行,如果单独的话取消注释,因为局部变量重复了。 System.out.println("日期:" + df.format(date)); //时间 DateFormat tf = DateFormat.getTimeInstance(); // Date date = new Date(); System.out.println("时间:" + tf.format(date)); //日期时间 //方法1 DateFormat dtf = DateFormat.getDateTimeInstance(); // Date date = new Date(); System.out.println("日期时间:" + dtf.format(date)); //方法2 SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance(); // Date date = new Date(); System.out.println("日期时间:" + sdf.format(date)); } }
提示:源代码下载请看文末1
图
结果
2018-10-18 日期:2018-10-18 时间:20:57:01 日期时间:2018-10-18 20:57:01 日期时间:2018-10-18 20:57:01
注意
从基础学起的注意一下
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;
这三行要注意检查一下。(需要导入类)
步骤(只以一个为例,剩下的都一样):
- 输入
SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance();
出现报错图标后点击:
- 然后双击出现的第一行,
也就是出现java.text
的提示的那一行。 import java.text.SimpleDateFormat;
会在上方【public class
的上方、package
的下方】出现。
给个建议
每个方法都试一遍,更有助于理解。
可以先注释掉不运行的代码,然后尝试运行,查看运行结果。
//end
【赞赏&支持&福利】
【赞赏】 │ 支持&福利(+每日领红包) │ 备用链
其他说明可以点击 简 介 说 明 查看。
转载请注明原文章链接,并标注作者amosC。转载格式如下:
来源:(此处附上原文链接)
作者:amosC(amoscey)
- 输入
-
Java统计代码段的执行时间
2018-05-03 15:28:40通常在进行代码测试和代码优化的时候,会想要知道代码执行时每段代码的执行时间,以便进行代码优化和调整。下面封装的类是利用代码段标记和执行时间差进行统计。使用时,仅需要在代码段中... * 在需要进行统计的代码...通常在进行代码测试和代码优化的时候,会想要知道代码执行时每段代码的执行时间,以便进行代码优化和调整。
下面封装的类是利用代码段标记和执行时间差进行统计。使用时,仅需要在代码段中加入CodeTimer.set("标记");就可以了,打印 时调用CodeTimer.print();统计字段有代码段、总时间(纳秒)、执行次数、平均时间。
封装类:
/** * 统计代码段执行时间。 * 在需要进行统计的代码段调用CodeTimer.set()方法进行标记。 * 打印时调用CodeTimer.print()方法 */ public class CodeTimer { private static String lastMark = "start"; private static long lastTime = System.nanoTime(); private static final Map<String, Long> timeMap = new LinkedHashMap<String, Long>(); private static final Map<String, Long> timeHappenCount = new LinkedHashMap<String, Long>(); public static void set(int mark) { set("" + mark); }; public static void set(String mark) { long thisTime = System.nanoTime(); String key = "[" + lastMark + "]->[" + mark + "]"; Long lastSummary = timeMap.get(key); if (lastSummary == null) lastSummary = 0L; timeMap.put(key, System.nanoTime() - lastTime + lastSummary); Long lastCount = timeHappenCount.get(key); if (lastCount == null) lastCount = 0L; timeHappenCount.put(key, ++lastCount); lastTime = thisTime; lastMark = mark; }; public static void print() { Integer a = 0; System.out.println( String.format("%25s %18s %18s %18s", "PROCESS", "TOTAL_TIME", "REPEAT_TIMES", "AVG_TIME")); for (Entry<String, Long> entry : timeMap.entrySet()) { System.out.println( String.format("%25s %18s %18s %18s", entry.getKey(), String.format("%,d", entry.getValue()), timeHappenCount.get(entry.getKey()), String.format("%,d", entry.getValue() / timeHappenCount.get(entry.getKey())))); } } }
打印出的效果形如:
PROCESS TOTAL_TIME REPEAT_TIMES AVG_TIME [start]->[0] 152,312 1 152,312 [0]->[4] 12,223,365 1 12,223,365 [4]->[10] 101,838 6 16,973 [10]->[8] 1,246,189 34 36,652 [8]->[5] 489,096,299 34 14,385,185 [5]->[6] 122,247,497 34 3,595,514 [6]->[7] 2,686,057,029 34 79,001,677 [7]->[1] 22,334 1 22,334 [1]->[9] 911,191 1 911,191
-
获取数据库时间的时间到java代码里
2017-03-25 06:43:21mysql语句为select timestampdiff(hour,departtime,arriveltime) from flight where flightNo = 'CZ6412'; 我想获取时间差,但是我没有这个字段,该如何获取?(java里面,hibernate注解创建的表) -
java计算代码执行时间
2018-06-20 14:28:14java计算代码执行时间: long startMili=System.currentTimeMillis();...//这里加入需要测试的代码 long endMili=System.currentTimeMillis();//结束时间 System.out.println("/**结束...java计算代码执行时间:
long startMili=System.currentTimeMillis();// 当前时间对应的毫秒数 System.out.println("/**开始 "+startMili); //这里加入需要测试的代码 long endMili=System.currentTimeMillis();//结束时间 System.out.println("/**结束 s"+endMili); System.out.println("/**总耗时为:"+(endMili-startMili)+"毫秒"); 第二种是以纳秒为单位计算的。 long startTime=System.nanoTime(); //获取开始时间 doSomeThing(); //测试的代码段 long endTime=System.nanoTime(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTime)+"ns");
-
Java测试程序代码运行时间
2019-02-17 18:16:55以毫秒为单位计算 //伪代码 long startTime=System.... //测试的代码段 long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTi... -
用Java编写获取当前时间的代码
2018-09-04 08:38:37import java.util.*; import java.text.SimpleDateFormat;//导入文本包中的简单日期格式类型 public class J090201 { public static void main(String[] args) { SimpleDateFormat sdf=new SimpleDateFormat(&... -
java中获取当前时间的代码
2016-12-09 23:49:18获取当前时间的毫秒值 class Demo{ public static void main(String[] args) throws ParseException { //获取当前时间到毫秒值 Date d = new Date(); System.out.println("当前时间为:" + d); //创建日期格式化... -
JAVA 测试程序代码运行时间
2009-05-19 14:58:00突然想准确的测试一下Java代码的执行时间,在网上找了一会。发现基本有以下两种方法:第一种是以毫秒为单位计算的。Java代码 //伪代码 long startTime=System.... //测试的代码段 long endTime=System.currentTime -
java测试代码段执行时间
2016-04-20 15:23:00因为遇到效率问题,要看看具体是哪段代码...//这里放需要测试执行时间的代码段。 System.out.println("\r 执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 "); 然后就可以在打log的地方看到对应执行时间 -
java代码遍历文件目录下的文件,获取文件的创建时间和修改时间
2020-07-15 19:01:06#java代码遍历文件目录下的文件,获取文件的创建时间和修改时间 ##例如文件目录为:D:/test 文件夹下包含有这5个文件: ##具体java代码如下(jsa.java): import java.nio.file.Files; import java.nio.file.... -
JAVA 关于现在的时间和30天后时间的代码
2018-10-15 13:41:24// 时间格式 SimpleDateFormat df = new ... // 现在的时间 Date now = new Date(); // 计算某一月份的最大天数 Calendar cal = Calendar.getInstance(); // Date转化为Calendar cal.setTim... -
java 统计每行代码的执行时间
2020-01-14 15:10:10使用工具 https://github.com/LinShunKang/MyPerf4J 直接下载 ... 下载后解压 执行命令 java -javaagent:MyPerf4J-ASM-2.10.0-SNAPSHOT.jar -DMyPerf4JPropFile=MyPerf4J.propert... -
Java中几种输出当前时间的代码
2018-08-03 20:15:53第一种: ①:import java.util.Date; public class MakeTime{ public static void main(String[] args) { Date date=new Date(); //这个地方需要导包,如上... System.out.println(“现在的时间是:”+da... -
java 静态代码块 动态代码块 加载时间
2015-07-26 19:42:43//自己看了一些视频,察觉了一些问题 现在来说明:Java中静态代码块 动态代码块加载时间 // 像JVM传递参数-verbose:class 我们可以看到classload加载class的顺序 ①证明证明Java是动态加载类的 ②动态块,静态块... -
java中如何测试一段代码的运行时间
2018-07-01 10:14:00java中如何测试一段代码的运行时间 一、以毫秒为单位。long startTime = System.currentTimeMillis();... //测试的代码段 long endTime = System.currentTimeMillis(); //获取结束时间 System... -
记录java代码运行时间
2018-03-19 15:58:45long startTime = System.currentTimeMillis(); //do something long endTime = System.currentTimeMillis(); System.out.println("程序运行时间:"...将要记录运行时间的代码放在中间,即可。... -
java获取当前日期时间代码
2016-08-04 16:49:471、获取当前时间,和某个时间进行比较。...获取当前时间的代码如下 代码如下 Date date = new Date(); date.getTime() ; 还有一种方式,使用 System.currentTimeMillis() ; -
Java代码插入的记录时间与保存到MYSQL数据库后的时间不一致,时间相差8小时
2019-03-14 10:18:01Java代码插入的记录时间与保存到MYSQL数据库后的时间不一致,时间相差8小时,例如: Java代码里插入的时间为:2019-03-12 14:57:53 数据库里面显示的时间为:2019-03-12 06:57:53 2.原因 JDBC连接时设置了... -
Java代码获取美国洛杉矶的时间
2019-01-16 15:38:09TimeZone time1 = TimeZone.getTimeZone("America/Los_Angeles"); Date today1 = Calendar.getInstance(time1,Locale.US).getTime(); DateFormat df1 = DateFormat.getDateTimeInstance();... -
Java中的代码点与代码单元概念
2017-05-16 22:36:20除此之外,还有采用两个字节表示字符的编码方式,为了能表示世界上所有的符号,JAVA采用16位(两个字节)的Unicode编码的char类型表示世界上所有的字符,设计之初,这65535个编码完全可以表示所有的字符,还有一部分... -
java分析测试代码程序执行时间与消耗内存
2019-07-18 10:52:43突然想用idea分析每个程序执行消耗的时间和内存,但是网上搜了一下好像也没明确说明要怎么办的,看了几篇类似的帖子,自己造了一个java单例类,定义了start和end方法来分析两个方法之间代码的执行。 代码如下: ... -
每隔一秒输出当前时间的java代码
2018-06-28 14:46:06import java.text.SimpleDateFormat;import java.util.Date;public class DisplayTime { public static void main(String[] args) { Thread thread = new Thread(){ public void run(){ SimpleDateFormat sdf ... -
java代码获取系统时间
2012-05-25 13:35:51方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import java.text.*; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就默认... -
测试Java代码的执行时间
2006-03-23 22:53:00使用以下简短代码即可测试,但是精确度不是很高,有的几微秒的就测试不... //测试的代码段,通常可以将主要算法封装在这里long end=System.currentTimeMillis(); //获取运行结束时间System.out.println("程序运行时间 -
java 60 行代码写一个简单可用的并且带过期时间的内存缓存
2017-09-19 14:41:5360 行代码写一个简单可用的并且带过期时间的内存缓存 在一个小项目中需要特别简单的使用一个缓存。如果要引入 ehcache 等其他第三方缓存还需要增加 各种 jar 甚至需要增加配置文件。特别麻烦。 所以就自己写了一个... -
时间序列ARMA算法的Java代码去哪儿找?
2014-10-23 07:54:39之前用MATLAB实现过ARMA算法,用于时间序列的预测,但是Java代码好像很少,应该去哪儿找相关的代码?谁有实现过相关算法?