先看程序,我本来事想试试 HashMap 的 keySet()和entrySet()的效率问题。后来我把时间加上也就是你们所到的
 “long stimes = System.currentTimeMillis();
   long ctimes = Calendar.getInstance().getTimeInMillis();
   long dtimes = new Date().getTime();
  ”
 三种取long类型的时间方式,后来程序一运行,发现System.currentTimeMillis();取出的值总是小于后两种方式取出的值。
 并且后两种方式取的值是相等的。我就不明白了,难道是代码的顺序问题?
 还有想问下JAVA中是不是只有这三种方法可以取返回long类型?import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;public class HashMapTest 
{
         public static void main(String[] args) 
{
HashMap<String,String> kmap = new HashMap<String,String>();
for (int i = 0; i < 1000; i++) 
{
kmap.put(""+i, "YL");
}

long stimes = System.currentTimeMillis();
long ctimes = Calendar.getInstance().getTimeInMillis();
long dtimes = new Date().getTime();
System.out.println(stimes+" "+ctimes+" "+dtimes);

Iterator<String> ktor = kmap.keySet().iterator();
while(ktor.hasNext())
{
System.out.println(ktor.next());
}

long stimes1 = System.currentTimeMillis();
long ctimes1 = Calendar.getInstance().getTimeInMillis();
long dtimes1 = new Date().getTime();
System.out.println(stimes1+" "+ctimes1+" "+dtimes1);


HashMap<String, String> emap = new HashMap<String, String>();
for (int i = 0; i < 1000; i++) 
{
emap.put(""+i, "ZT");
}
Iterator<Entry<String, String>> itor = emap.entrySet().iterator();
while(itor.hasNext())
{
Entry<String, String> e = itor.next();
//System.out.println(e.getKey());
System.out.println(e.getValue());
}

long stimes2 = System.currentTimeMillis();
long ctimes2 = Calendar.getInstance().getTimeInMillis();
long dtimes2 = new Date().getTime();
System.out.println(stimes2+" "+ctimes2+" "+dtimes2);
}
}

解决方案 »

  1.   

    long stimes = System.currentTimeMillis();比long ctimes = Calendar.getInstance().getTimeInMillis(); 早执行,时间当然比后者小了
      

  2.   

    你的意思就是顺序问题 所造成的?
    那好我换个顺序
    long dtimes = new Date().getTime();
    long stimes = System.currentTimeMillis();
    long ctimes = Calendar.getInstance().getTimeInMillis();结果:1244617136926 1244617136957 1244617136926long dtimes = new Date().getTime();
    long ctimes = Calendar.getInstance().getTimeInMillis();
    long stimes = System.currentTimeMillis();
    结果:1244617781428 1244617781428 1244617781397.long stimes = System.currentTimeMillis();
    long dtimes = new Date().getTime();
    long ctimes = Calendar.getInstance().getTimeInMillis();
    结果:1244617851238 1244617851284 1244617851238不明白结果为什么会是这样,真的是代码的顺序问题?
      

  3.   

    即使三条语句同时执行,后两种方法耗费的时间也要长得多。
    System.currentTimeMillis()是native方法,直接获得操作系统时钟,而且是static的,无需构造任何实例。
    后两种方法都要构造对象实例,而且执行的无关任务非常多,看看源码就知道了。
      

  4.   

    嗯,可能像3楼这样说的
    我在网上看到取时间的方式很多种,所以我就拿来对比了。谁知道牵扯一个精确的问题 呵呵
    以后要是取返回long的时间就用System.currentTimeMillis()