`

java集合框架分析(工作两年后)

    博客分类:
  • java
 
阅读更多

一 ArrayList,可自动扩充容量的动态数组


  以前金蝶中间件的研发总经理张勇和其他人都说过,java的集合框架源码写的很牛B,看了ArrayList后,开始明白他们的意思了。
  ArrayList基于数组实现,然后,初始化,add,remove的方法,都很具有逻辑性,需要推敲才能理解好,所以代码会巧妙,而且Sun的人写代码比较简洁
  所以ArrayList的代码有两个特点:
  1.每个方法有算法逻辑
  2.每个方法很简洁,没什么冗余代码

 

二 LinkedList 双向循环列表


LinkedList是基于双向---循环的列表,双向循环的特性用的很彻底
所以head元素被用到的地方很多,add,addBefore()和remove这些方法都用到了
非常具有算法逻辑!值得借鉴!
http://www.iteye.com/topic/553199

 

三 Hashmap 数组+链表实现(第三年)


http://uuubd.iteye.com/blog/1447129
http://zhangshixi.iteye.com/blog/672697

负载因子默认是7.5,如果越大,空间利用率越好,但会增加查询时间也越多
hash数据的空间利用率越高,但是为什么查询时间越多呢?
答:简单原因是:不管负载因子多大,都存在hash冲突,但负载因子大的时候,冲突
在同一个位置上的对象越多,所以,遍历链表时查询的时间花的更多
举个特殊例子:
hashmap已知条件如下:
1.初始大小16
2.hash数组长度为16
3.负载因子为0.75(0.25)
4.hashmap最多容纳12(4)个对象
但是如果发生冲突时,所有对象,但hash到同一个位置上,
当负载因子为0.75,需要遍历的链表长度为4
当负载因子为0.75,需要遍历的链表长度为12
由此看出负载因子越大,查询时间越多

补充一点:也许你会觉得hash到同一个位置上的情况太特殊了,不够信服力,但是我的同事鲍超告诉我,但负载因子越大,冲突的概率越大,无冲突的概率却小
这点可以通过分步(不是分类,这是高中数学统计概的方法,复习一下)的方式来计算概率
有空自己计算一下,我明白了,再过一段时间,我自己在纸上再算一次

哈哈,终于明白负载因子越大,空间利用越大,但查询时间也会越多,所以默认0.75是折中的做法啦!!!

 

分享到:
评论

相关推荐

    java编程宝典

    3集合框架 11 3.1 如何遍历一个List/Set(foreach、Iterator、Lambda表达式) 11 3.2 如何遍历一个Map(foreach、Iterator、Lambda表达式) 11 3.3 如何实现一个Set<Student> set = new TreeSet(); 12 3.4 如何实现...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    讲一下java中的集合 Java面试题10.ArrayList 和LinkedList的区别 Java面试题11.HashMap和HashTable的区别 Java面试题12.实现一个拷贝文件的工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java ...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java ...

    AIC的Java课程1-6章

    第11章 集合 4课时  理解什么是集合以及Java的集合框架。  辨析List,Set和Map接口。 • 理解List接口,辨别使用List接口的实现类。 • 理解Set接口,辨别使用Set接口的实现类。...

    java常用工具类的使用

    在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如对日期的操作,对集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1...

    java面试题大全(2012版)

    这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 23 34、String 和StringBuffer的...

    java面试宝典

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java范例开发大全

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

    Java经典入门教程pdf完整版

    JE(Java, Micro edition)是对标准版JSE进行功能缩减后的版本,于199年6月 由 Sun Microsystems第一次推向Java团体。它是一项能更好满足Java开发人员不同需求 的广泛倡议的一部分。 Sun Microsystems将JM定义为“一种...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    java8workshop:我的 Java 8 工作坊

    此代码是 2014 年 3 月在 javaBin Bergen 举行的 java 8 研讨会的练习。这两个接口代表了作为练习的一部分要实现的方法。 我们提供了框架实现和失败的 junit 测试。 数据集 数据集位于 src/main/resources/income....

    百度地图毕业设计源码-java-core:核心

    新用户低至一折购买【1核2GIM1年99元,2年199元,3年298元】【2核4GIM1年545元,2年927元,3年1227元】【2核8G5M3年2070元】,建议购买两核的服务器,1核的服务器CPU使用率会有限制。老用户可以加入我的战队,然后...

    百度地图毕业设计源码-JavaGuide:Java基础知识

    新用户低至一折购买【1核2GIM1年99元,2年199元,3年298元】【2核4GIM1年545元,2年927元,3年1227元】【2核8G5M3年2070元】,建议购买两核的服务器,1核的服务器CPU使用率会有限制。老用户可以加入我的战队,然后...

    java基础题 很全面

    5. 触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别? 23 简答题 23 1. 作用域public,protected,private,以及不写时的区别 23 2. BS与CS的联系与区别。 24 3. JDO是什么? 25 4. ...

Global site tag (gtag.js) - Google Analytics