Java
长鲸扫地
这个作者很懒,什么都没留下…
展开
-
java容器类源码分析——TreeMap
TreeMap基于红黑树实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。在介绍TreeMap前先介绍Comparable和Comparator接口。 Comparable接口:[cod...2013-07-16 13:43:23 · 172 阅读 · 0 评论 -
java的动态性编程(三)——如何运用反射编程
一开始,在真正进入编写实现代码的工作之前,我将首先定义要解决的问题,然后为这个库设计一个接口。不过,在开发这个库的时候,我并不是按照上述步骤进行的――我先是尽力简化一群有公共代码基础的应用程序中的现有代码,然后使之通用化。本文中使用的“定义-设计-构建”这种线性序列比起完完整整地描述开发过程要简练得多,而且,按照这种方式来组织对开发过程的描述,我可以修正我原先的一些假设,并清理掉这个库的代...原创 2013-07-23 01:05:52 · 164 阅读 · 0 评论 -
java的动态性编程(二)——引入Reflection
使用反射不同于常规的Java编程,其中它与 元数据--描述其它数据的数据协作。Java语言反射接入的特殊类型的原数据是JVM中类和对象的描述。反射使您能够运行时接入广泛的类信息。它甚至使您能够读写字段,调用运行时选择的类的方法。反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。但反射的某些方面存在一些疑问。在本文中,我将深入讨论为什么您可能...2013-07-22 13:13:56 · 130 阅读 · 0 评论 -
java的动态性编程(一)——class和class load
本文中,我将讨论一些基本概念,它们是这些 Java 平台动态特性的基础。这些概念的核心是用于表示 Java 类的二进制格式,包括这些类装入到 JVM 时所发生的情况。本文不仅是底层基础,而且还演示了开发人员在使用 Java 平台时碰到的一些非常实际的问题。[b]用二进制表示的类[/b]使用 Java 语言的开发人员在用编译器编译他们的源代码时,通常不必关心对这些源代码做了些什么这样的细节。...2013-07-22 13:02:55 · 157 阅读 · 0 评论 -
GC的优化提升系统性能
[b]项目背景[/b]笔者处理某个大型电信项目的 CPU100% 的压力性能测试, 用以检查在系统运行环境不正常的情况下,系统可以运行到何种程度。测试过程是:请求测试的模拟器向系统不断发出大量请求, 系统接受由模拟器发出的请求,然后将请求置于一个任务池中,如果当前有空闲的线程,则该线程会从任务池中取出一个任务进行处理,如果没有空闲的线程,则该任务一直会待在任务池中,直到有空闲的线程来处理它。因...2013-07-22 12:52:01 · 272 阅读 · 0 评论 -
夜话java代码性能优化
写了多年程序,是否你依然停留在copy各种API的困谷中。其实,你平时可以放缓你敲码的脚步,停下来盯着屏幕看几分钟,或许你会有另外的想法。对,我们可以对我们的代码进行优化,让你的表达尽量优雅起来。我下面只稍微写一下我在编码时的一些额外思考,以后准备写写一系列的这方面的观点,欢迎讨论与参详。1.[b]不用new关键词创建类的实例[/b] 用new关键词创建类的实例时,构造函数链中的所有...2013-07-22 01:21:05 · 98 阅读 · 0 评论 -
java容器类源码分析——LinkedList
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。 除此之外,LinkedList还提供了一些可以使其作为栈、队列、双端队列的方法。这些方法中有些彼此之间只是名称的区别,以使得这些名字在特定的上下文中显得更加的合适。 ...原创 2013-07-17 20:37:27 · 220 阅读 · 0 评论 -
java容器类源码分析——HashSet和LinkedHashSet
首先对Set接口进行简要的说明。 存入Set的每个元素必须是惟一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set不保证维护元素的次序。Set与Collection有完全一样的接口。 在没有其他限制的情况下需要Set时应尽量使用HashSet,因为它对速度进行了优化。 下面是HashSet的定义: ...2013-07-16 17:36:14 · 132 阅读 · 0 评论 -
java容器类源码分析——LinkedHashMap
LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序(HashMap是基于散列表实现的。[code="java"]public class LinkedHashMap extends HashMap implements Map[/co...2013-07-16 17:15:30 · 176 阅读 · 0 评论 -
java容器类源码分析——ArrayList
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小...... 首先看到对ArrayList的定义:[code="java"]public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, jav...2013-07-16 14:53:44 · 385 阅读 · 0 评论 -
java容器类源码分析——HashMap
在看HashMap源码之前先复习一下数据结构。 Java最基本的数据结构有数组和链表。数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。链表恰好相反,可动态增加或减少空间以适应新增和删除元素,但查找时只能顺着一个个节点查找,所以增加删除快,查找慢。有没有一种结构综合了数组和链表的优点呢?当然有,那就是哈希表(虽说是综合优点,但实际上查找...2013-07-16 14:13:37 · 149 阅读 · 0 评论 -
java的动态性编程(四)——用 Javassist 进行类转换
Javassist 不仅是一个处理字节码的库,而且更因为它的另一项功能使得它成为试验 classworking 的很好的起点。这一项功能就是:可以用 Javassist 改变 Java 类的字节码,而无需真正了解关于字节码或者 Java 虚拟机(Java virtual machine JVM)结构的任何内容。从某方面将这一功能有好处也有坏处 -- 我一般不提倡随便使用不了解的技术 -- 但是比起...2013-07-23 11:35:02 · 180 阅读 · 0 评论