我的Java开发学习之旅------>System.nanoTime与System.currentTimeMillis的区别
2023-09-27 14:29:23 时间
首先来看一道题:下面代码的输出结果是什么?
import java.util.HashMap; import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map String, String map=new HashMap String, String map.put(String.valueOf(System.currentTimeMillis())+"a", "1"); map.put(String.valueOf(System.currentTimeMillis())+"a", "2"); map.put(String.valueOf(System.currentTimeMillis())+"a", "3"); for (Map.Entry String, String entry : map.entrySet()) { System.out.println(entry.getValue()); }
A. 123 B.213 C.123顺序无法确定D.以上答案都不对 我选的答案是C.123顺序无法确定,对程序的理解为:Map中的键是Set,值是Collection,map.entrySet()产生的类型是Set,因而能用foreach(),而Set顺序是随机的,因此输出的1、2、3的顺序不确定。 但是当我把程序在Eclipse上运行后,输出结果却是为:3。 结果亮瞎了我的双眼,原来是现在的计算机运行速度很快,因而极有可能System.currentTimeMillis()的值相等,而Set是不允许有重复的,这样就会覆盖它的值,因此在电脑上厕所时只输出3。 如果想达到期待的输出结果:123顺序无法确定的话。可以将System.currentTimeMillis()改为System.nanoTime()。
public static void main(String[] args) { Map String, String map=new HashMap String, String map.put(String.valueOf(System.nanoTime())+"a", "1"); map.put(String.valueOf(System.nanoTime())+"a", "2"); map.put(String.valueOf(System.nanoTime())+"a", "3"); for (Map.Entry String, String entry : map.entrySet()) { System.out.println(entry.getValue()); } 这样输出的结果就是123顺序无法确定了。有可能是213,231,123。。。 ================================================================= 下面是中文官方文档上的解释:
返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。例如,许多操作系统以几十毫秒为单位测量时间。
请参阅 Date 类的描述,了解可能发生在“计算机时间”和协调世界时(UTC)之间的细微差异的讨论。
返回最准确的可用系统计时器的当前值,以毫微秒为单位。
此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。返回值表示从某一固定但任意的时间算起的毫微秒数(或许从以后算起,所以该值可能为负)。此方法提供毫微秒的精度,但不是必要的毫微秒的准确度。它对于值的更改频率没有作出保证。在取值范围大于约 292 年(263 毫微秒)的连续调用的不同点在于:由于数字溢出,将无法准确计算已过的时间。
例如,测试某些代码执行的时间长度:
long startTime = System.nanoTime(); // ... the code being measured ... long estimatedTime = System.nanoTime() - startTime;
================================================================================================== 作者:欧阳鹏 欢迎转载,与人分享是进步的源泉! 转载请保留原文地址:http://blog.csdn.net/ouyang_peng ==================================================================================================
字节卷动 You will never know how excellent you are unless you impel yourself once.
相关文章
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
- 朴素贝叶斯分类算法-----java
- java内存模型及内存与cpu之间的关系
- Java 8的新特性
- java读取资源文件的五种方式
- Java 常用语法和数据结构
- AKKA文档(java版)
- java.nio.file.AccessDeniedException: /home/soft/elasticsearch-6.8.0/config/jvm.options
- 【Java】+获取JSON串key名称及key对应值的类型
- Java中的守护线程 & 非守护线程(简介)
- Java 11 部分新特性
- java并发4-单例设计方法
- java 集合类 & 容器
- 如何选择一台适合Java开发的电脑
- java中的null和""区别------&&与&的区别
- IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数
- Java学习小记-基本数据类型&类型转换
- Java学习小记-标识符&关键字
- How to improve Java's I/O performance( 提升 java i/o 性能)
- Java Machine Learning Tools & Libraries--转载