12 2012 档案
摘要:在分析Java集合类源码的时候涉及到了树的知识,发现树结构要比数组和链表等要复杂的多,所以巩固和补充一下自己这块的知识。
树(Tree)可以有几种定义。其中一种方式是递归方式。
树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:
有且仅有一个特定的称为根(Root)的结点;
其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTree)。
从定义中可以看出一棵树是N个节点和N-1条边的结合,其中一个节点叫做根。存在N-1条边是这样得出的:每条边都将某个节点连接到它的父亲,而除去根节点外,每个节点都有一个父亲。
一些树相关的基础定义:
阅读全文
摘要:Java容器类的用途是“保存对象”,分为两类:Map——存储“键值对”组成的对象;Collection——存储独立元素。Collection又可以分为List和Set两大块。List保持元素的顺序,而Set不能有重复的元素。
本文分析Set中最常用的HashSet类,并简单介绍和对比LinkedHashSet。
首先对Set接口进行简要的说明。
存入Set的每个元素必须是惟一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set不保证维护元素的次序。Set与Collection有完全一样的接口。
在没有其他限制的情况下需要Set时应尽量使用HashSet,因为它对速度进行了优化。
阅读全文
摘要:LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序(HashMap是基于散列表实现的,相关HashMap的内容可以看《Java集合类》和《HashMap源码分析》)。
阅读全文
摘要:《Java集合类》一文中已经最List的基本操作进行说明,并且比较了ArrayList和LinkedList的效率。本文将进一步解析LinkedList。
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。
初次之外,LinkedList还提供了一些可以使其作为栈、队列、双端队列的方法。这些方法中有些彼此之间只是名称的区别,以使得这些名字在特定的上下文中显得更加的合适。
阅读全文
摘要:在Java集合类中最常用的除了ArrayList外,就是HashMap了。本文尽自己所能,尽量详细的解释HashMap的源码。一山还有一山高,有不足之处请之处,定感谢指定并及时修正。
阅读全文
摘要:不积跬步,无以至千里;不积小流,无以成江海。从基础做起,一点点积累,加油!
《Java集合类》中讲述了ArrayList的基础使用,本文将深入剖析ArrayList的内部结构及实现原理,以便更好的、更高效的使用它。
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小......
认真阅读本文,我相信一定会对你有帮助。比如为什么ArrayList里面提供了一个受保护的removeRange方法?提供了其他没有被调用过的私有方法?
阅读全文
摘要:深入剖析为什么ArrayList会有一个受保护的removeRange(int fromIndex,int toIndex)方法!!!
阅读全文
摘要:数组是一种很常见的数据结构,开始接触编程的时候多数程序都和数组相关。但很多情况下数组是无法满足需求的:
不知道具体数据长度、需要自动排序、存储键值对,这是就需要使用到Java中一个重要的类库——集合类。本文论述集合类的基础知识,包括基础操作及部分效率问题。
阅读全文
摘要:想总结一下验证码(开源使用的验证码。当然,也可以自己去实现,不过有成熟的开源项目就用吧)的内容,然后看了几个开源项目,发现SimpleCaptcha使用比较简单,容易入手,就从它开始吧。
阅读全文
摘要:字符串操作是编写程序中最常见的行为,本文对String、StringBuilder、StringBuffer三个类在字符串处理方面的效率进行分析。
阅读全文
摘要:在网络编程中必然要面对的就是连接超时问题,在上一篇Hessian解析及应用(整合Spring)中分析了Hessian的原理及使用,但是就是少了超时相关的内容,这篇博客对Hessian的超时设置进行说明。
阅读全文