`
pengzhoushuo
  • 浏览: 12507 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JDK源码研究之util实用类

阅读更多
BitSet: bit集合,实现了常见的逻辑操作。

Calendar:Date中很多过时的方法都在此类实现了。它是抽象类,有两个实现分别为GregorianCalendar和JapaneseImperialCalendar

Formatter: String.format()方法其实就是建了new一个Formatter进行format操作,提供类似C语言的print格式输出。

Locale:  Locale 来执行其任务的操作称为语言环境敏感的 操作。

Observer接口与Observable类: JDK提供的实现观察者模式的框架,根据本框架:观察者对象应该实现Observer接口(只有update方法),被观察者作为Observable的子类,Observable可以添加/删除任间多个Observer,
     当调用了notifyObservers时其实就是调用了Observable持有的Observer的update方法。这个框架其实并不好用,用继承的方式限制了它的应用范围。

Properties:很常用的一个类,但很少有人知道它是继承自HashTable,这种设计并不好,因为你甚至可以调用父类的add方法加入非String的Key,都是该死的继承惹得祸,更好的设计应该让Properties类持有HashTable的引用,用组合的方式解决问题。
     这里是一个误用继承的活鲜鲜的例子!!! getProperty没有加synchronized,而setProperty加了synchronized关键字。

RandomAccess: 有这个接口标记的是可以支持形如get(i)的快速访问的,一般来说Array实现的均支持快速访问,而Linked实现的由于只维护了一个headNode也许还有个子tailNode,而get(i)的时候它得从头结点往下找呀找呀,效率当然低啦。曾经做过测试在ArrayList的iterator()比起直接for(){get(i)}
   稍微要慢些(但带来了统一接口的好处),而LinkedList的iterator()比for(){get(i)}效率要高上不少。


Random: 这个类改变了默认种子的机制,原来是当前时间的毫秒数作为种子的,这样如果CPU够快在同一个循环里可能取出来相同的种子。现在毫秒变成了纳秒,而且还加上static变量的自增,理论上来说是不可能有相同的种子了。

Scanner: 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器,结合System.in来用倒是挺不错的。

TimeZone:时区相关的,一个默认实现是SimpleTimeZone。

Timer: Timer可以执行固定时间或延迟执行的(TimeTask implemtns Runalbe),也可以周期性地执行线程(TimeTask)。其实在Timer里面维持着TaseQueue,这个Queue按任务的下次执行时间排序(小顶堆),执行完一个TimeTask还会根据下一次执行的时候适当地wait(fixTime)而不是空循环,从而提高效率。

UUID:采用时间与网卡或机器的一些其他参数做出的hash,基本上能够保证惟一性。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics