测试hashmap 内存消耗情况 两种遍历方式耗时情况

package test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * 测试hashmap 内存消耗情况
 * hashmap 两种遍历方式耗时情况
 * key value 允许为null值 相同key只会保留最后一个值
 * @author Administrator
 *
 */
public class TestHashMap
{
    public static void main(String[] args)
    {
        try
        {
            /**HashMap添加100万条记录消耗内存*/
              Integer a = 1;
              long start = 0;
              long end = 0;
              // 先垃圾回收
              System.gc();
              start = Runtime.getRuntime().freeMemory();
              System.out.println("freeMemory1:"+Runtime.getRuntime().freeMemory());
              HashMap map1 = new HashMap();
              for (int i = 0; i < 100000; i++) {
                  map1.put(i, a);
              }
              // 快要计算的时,再清理一次
              System.gc();
              System.out.println("freeMemory2:"+Runtime.getRuntime().freeMemory());
              
              end = Runtime.getRuntime().freeMemory();
              System.out.println("一个HashMap对象占内存:" + (end - start)/1024/1024+"M");
              
              start = Runtime.getRuntime().freeMemory();
              System.out.println("freeMemory3:"+Runtime.getRuntime().freeMemory());
            Map<String,String> map = new HashMap<String,String>();
            for(long i=0;i<100000;i++)
            {
                map.put("key"+i, "value"+i);    
            }
            //遍历方式一开始时间
            long startdate = System.currentTimeMillis();
            System.out.println("开始时间1:"+startdate);
            Set set1 = map.keySet();
            for(Iterator iter = set1.iterator();iter.hasNext();){
                String key = iter.next().toString();
//                System.out.println("key::"+key);
                String value = map.get(key);
//                System.out.println("value:"+value);
            }
          //遍历方式一截止时间
            long enddate = System.currentTimeMillis();
            System.out.println("截止时间1:"+enddate);
            long hs1 =enddate - startdate;
            System.out.println("总耗时1:"+hs1);
            
            //遍历方式二开始时间
            System.out.println("开始时间2:"+System.currentTimeMillis());
            startdate = System.currentTimeMillis();
            Set set2 = map.entrySet();
            for(Iterator iter = set2.iterator();iter.hasNext();){
                Map.Entry entry = (Map.Entry)iter.next();
                String key = entry.getKey().toString();
//                System.out.println("key::"+key);
                String value = entry.getValue().toString();
//                System.out.println("value:"+value);
            }
          //遍历方式二截止时间
            enddate =System.currentTimeMillis();
            System.out.println("截止时间2:"+enddate);
            long hs2 = enddate -startdate;
            System.out.println("总耗时2:"+hs2);
            
            System.out.println("时间差:"+(hs2-hs1));
            
            // 快要计算的时,再清理一次
            System.gc();
            end = Runtime.getRuntime().freeMemory();
            System.out.println("freeMemory4:"+Runtime.getRuntime().freeMemory());
            System.out.println("一个HashMap对象占内存2:" + (end - start)/1024/1024+"M");
           
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值