`

java源码之集合类学习心得和笔记

    博客分类:
  • java
阅读更多
java源码之集合类学习心得和笔记
一List
1.首先是Vector和ArrayList类,他们都继承了AbstractList并且实现了List,RandomAccess,Cloneable,Serializable等接口。而AbstractList继承了AbstractCollection也实现了List接口。Vector和ArrayList之间的区别一就是Vector方法都是线程同步的,所以Vector更为安全,相反,其执行效率就会下降。区别二在于ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。ArrayList:
int newCapacity = (oldCapacity * 3)/2 + 1; 

Vector:
int newCapacity = (capacityIncrement > 0) ?
		(oldCapacity + capacityIncrement) : (oldCapacity * 2);

主要就是这两个区别,剩下来的就是方法的调用不一样。而方法的实现内容都是一样的。

2.再来看LinkedList类,他继承自AbstractSequentialList,而这个类又继承了AbstractList。而AbstractSequentialList主要是用listIterator()去实现了AbstractList中的get,set,add,remove,addAll等方法。LinkedList实现了List,Deque,Cloneable,Serializable等接口。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

3.AbstractList和AbstractSequentialList最大的区别在于,AbstractList完成的是我们需要随机访问”数据存储(如数组)所需的工作。对于连续的访问数据(如链表),应优先使用 AbstractSequentialList,这里的随机访问代表我们可以随机访问,只有顺序表才可以,而连续的访问数据代表我们必须连续的访问数据,对于链表我们必须连续的访问,不能跳着随机访问,所以说我们在对于链表处理操作时考虑使用AbstractSequentialList类。

二Set
1.HashSet,它继承自AbstractSet,而AbstractSet继承自AbstractCollection,这个AbstractSet也实现了Set接口。而HashSet由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。他的方法不是同步的,也就是不是synchronized的。

2.LinkedHashSet,它继承自HashSet,就是强加了一个顺序,它的几个构造方法调用的是父类的方法。而这个父类就是采用LinkedHashMap来实现的。所以强加了一个顺序。也就是元素插入的顺序来维护集合的链接表。

3.TreeSet,它也继承自AbstractSet,而TreeSet实现了NavigableSet、Cloneable、Serializable接口。它使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。 其中的NavigableSet接口提供了对Set导航的便捷方法。
而TreeSet的构造方法就是创造一个TreeMap,然后把TreeMap对象赋值给TreeSet中的m属性。

三Map
首先Map不是Collection框架下的,它是独立的一个分支。
1.HashMap和HashTable,
区别一:HashMap继承自AbstractMap,并且实现了Map,Cloneable,Serializable接口,而HashTable继承自Dictionary,同样实现了一样的接口。
区别二:HashMap是不安全,HashTable中的方法都是synchronized,也就是线程安全的。
区别三:HashMap支持null值,无论是在值或是键中。HashMap允许null值是指可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
区别四:HashTable有一个contains(Object value)方法时HashMap没有的,功能和containsValue(Object value)功能一样。
区别五:HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。具体可参见http://www.chineselinuxuniversity.net/articles/36817.shtml

2.LinkerHashMap,继承自HashMap,但是内部维持了一个双向链表,可以保持顺序。

3.TreeMap,继承自AbstractMap,实现了NavigableMap<K,V>, Cloneable, java.io.Serializable。它使用元素的自然顺序对元素进行排序,或者根据创建map时提供的 Comparator 进行排序,具体取决于使用的构造方法。 其中的NavigableMap接口提供了对Map导航的便捷方法。
具体类之间的关系可见:
http://blog.csdn.net/zztfj/article/details/7563262更全的类之间的关系也可见
http://www.iteye.com/topic/395544(有些小错误)
分享到:
评论

相关推荐

    JAVA源码笔记

    这份"JAVA源码笔记"集合了作者从零开始学习Java时,通过观看网络视频并结合实践所整理的一系列源码和学习心得。这不仅有助于加深对Java语言的理解,也能帮助初学者建立良好的编程思维。 首先,我们要明白Java是一种...

    基于Java的网课学习笔记设计源码

    本项目名为"基于Java的网课学习笔记设计源码",是一个使用Java语言开发的高效学习笔记管理系统。这个系统的设计目标是为用户创造一个便捷、高效的在线学习环境,帮助他们更好地整理、记录和管理自己的学习笔记。以下...

    Java最全学习资料+面试题+DOS命令+设计模式+Excel技巧+java学习笔记

    在Java开发中,我们还会用到`javac`(编译Java源码)和`java`(运行编译后的类文件)等与Java相关的DOS命令。 4. **设计模式**:设计模式是软件工程中经过验证的解决方案模板,用于解决常见问题。Java开发者应该...

    【JavaSE】Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    8. **文档分类整理**:有序的文档组织能让学习更有条理,例如,可能有按照Java基础、异常处理、集合框架、多线程、网络编程、IO流等主题分类的文档,便于查找和学习。 9. **持续更新**:这个项目的特点是持续更新,...

    java学习笔记

    从标题和描述来看,我们可以推测这是一个关于Java编程的资源集合,可能包含了作者的学习心得、代码示例或者讲解文章。其中提到的“源码”标签暗示了笔记可能包含实际的Java代码实例,而“工具”标签则可能意味着笔记...

    study1010_bursttpf_java学习_源码.zip

    描述中的内容与标题相同,进一步确认了这是Java学习相关的源码集合。 【Java编程基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的设计目标是“一次编写,...

    通用mapper源码、笔记、资料_java_

    通用Mapper是Java开发中常用的MyBatis框架的...这份资料集合,无论是对于初学者还是有经验的开发者,都能提供宝贵的参考和学习资源。记得结合实际项目去学习和运用,理论与实践相结合,才能真正掌握通用Mapper的魅力。

    struts 培训班源码及笔记

    这个“Struts培训班源码及笔记”资料集合显然提供了深入学习和理解Struts框架的宝贵资源。 首先,我们来看看`code`目录中的源码。这部分内容可能是学员在培训班中编写的示例代码或者是实际项目中的应用实例。通过...

    android 学习心得

    - **使用工具**:如dex2jar、JD-GUI、apktool等,可以将APK文件反编译为Java源码或XML布局文件。 - **分析代码**:通过对反编译出的代码进行分析,可以了解应用的内部实现细节。 ### 十四、如何进行Android单元测试...

    notes-源码.rar

    【标题】"notes-源码.rar"通常是一个包含编程源代码...总之,"notes-源码.rar"的解析和学习是一个深入理解代码逻辑、编程技术和软件工程实践的过程。无论是为了个人学习还是团队协作,这种活动都能带来宝贵的实践经验。

    Java-study:自学java笔记

    "Java-study:自学java笔记"很显然是一份关于学习Java的资料集合,可能包括了各种教程、示例代码和学习心得。在这个压缩包文件"Java-study-main"中,我们可以期待找到一系列与Java学习相关的资源。 Java的基础知识点...

    spring famework xml配置使用示例

    Spring 框架是Java开发中的一个核心框架,它提供了全面的应用程序开发模型,强调了组件的装配和依赖注入。XML配置是Spring早期版本中主要的配置方式,它允许开发者在XML文件中定义Bean及其相互关系。在这个"spring ...

    java8源码-esmusssein777.github.io:我的学习记录

    在`esmusssein777.github.io-master`这个压缩包中,可能包含了作者对这些知识点的详细学习记录和实践案例,通过阅读和学习,你将能够更深入地理解和掌握这些概念,并能够在实际项目中灵活运用。同时,`effectiveJava...

    JAVA-JDBC-DbUtils教程简单到精通!

    笔记可能包含了关键点的总结和学习心得,是巩固知识的好材料。 总的来说,掌握Java JDBC和DbUtils对于任何Java开发者来说都是必备技能,特别是涉及到数据库操作的项目。这个教程为你提供了一个从基础到精通的完整...

    Notes01---Ron

    由于描述中提到了一个博客链接,我们可以推测这篇笔记可能是一位名叫Ron的学习者对于他在阅读源码、使用工具过程中的一些心得和总结。 在Spring框架方面,Spring2.5是Spring的一个较早版本,但其核心概念和机制仍然...

    hibernate映射心得 原创

    这是一个文档文件,很可能是作者详细记录的关于Hibernate映射的学习笔记或教程,包含了作者在学习和应用Hibernate映射过程中的思考、问题解决步骤以及实用示例。 **综合知识点:** 1. **Hibernate ORM基础**:介绍...

    SCJP notes

    【SCJP笔记】是针对Java认证考试(Sun Certified Programmer for the Java 2 Platform, Standard Edition,简称SCJP)的学习资料集合。这个压缩包包含了多个文档,涵盖了不同的学习角度和资源,帮助考生深入理解和...

    芝麻开门博客网.zip

    例如,学习者可以从Java基础的变量、数据类型、控制结构开始,逐步深入到面向对象编程的概念,包括类、对象、继承、封装和多态等,最终触及到高级主题,如泛型、异常处理、集合框架以及Java在Web开发中的应用。...

    个人学习收集

    【标题】"个人学习收集"揭示了这是一个关于个人学习资源的集合,可能包含了作者在学习过程中整理的各种IT技术文档或笔记。这个标题暗示了我们将会接触到一些基础到进阶的IT知识,特别是针对某些框架或者工具的理解和...

    lucene学习资料

    另一份资料`Lucene学习笔记.doc`则可能包含了作者在学习Lucene过程中积累的笔记,可能包括了对Lucene核心类的理解,如IndexWriter、Directory、Document、Field等,以及对高级特性的探索,如近实时搜索、多字段排序...

Global site tag (gtag.js) - Google Analytics