打字猴:1.700445254e+09
1700445254
1700445255 可能会有读者在想,是不是可以在声明时指定HashMap的默认长度和加载因子来减少此问题的发生。是可以缓解此问题,可以不再频繁地进行数组扩容,但仍然避免不了内存溢出问题,因为键值对的封装对象Entry还是少不了的,内存依然增长较快。
1700445256
1700445257 注意 尽量让HashMap中的元素少量并简单。
1700445258
1700445259
1700445260
1700445261
1700445262 编写高质量代码:改善Java程序的151个建议 [:1700438150]
1700445263 编写高质量代码:改善Java程序的151个建议 建议79:集合中的哈希码不要重复
1700445264
1700445265 在一个列表中查找某值是非常耗费资源的,随机存取的列表是遍历查找,顺序存储列表是链表查找,或者是Collections的二分法查找,但这都不够快,毕竟都是遍历嘛,最快的还要数以Hash开头的集合(如HashMap、HashSet等类)查找,我们以HashMap为例,看看它是如何查找Key值的,代码如下:
1700445266
1700445267 public static void main(String[]args){
1700445268
1700445269 int size=10000;
1700445270
1700445271 List<String>list=new ArrayList<String>(size);
1700445272
1700445273 //初始化
1700445274
1700445275 for(int i=0;i<size;i++){
1700445276
1700445277 list.add(“value”+i);
1700445278
1700445279 }
1700445280
1700445281 //记录开始时间,单位纳秒
1700445282
1700445283 long start=System.nanoTime();
1700445284
1700445285 //开始查找
1700445286
1700445287 list.contains(“value”+(size-1));
1700445288
1700445289 //记录结束时间,单位纳秒
1700445290
1700445291 long end=System.nanoTime();
1700445292
1700445293 System.out.println(“list执行时间:”+(end-start)+“ns”);
1700445294
1700445295 //Map的查找时间
1700445296
1700445297 Map<String, String>map=new HashMap<String, String>(size);
1700445298
1700445299 for(int i=0;i<size;i++){
1700445300
1700445301 map.put(“key”+i,“value”+i);
1700445302
1700445303 }
[ 上一页 ]  [ :1.700445254e+09 ]  [ 下一页 ]