黑马程序员技术交流社区

标题: 集合框架图 and 集合总结 [打印本页]

作者: 卢祥洲    时间: 2013-6-19 07:07
标题: 集合框架图 and 集合总结
本帖最后由 卢祥洲 于 2013-6-20 09:01 编辑

刚把集合看完,自己按照老师的集合框架图,自己用visio画了一遍,放云五表示支持哈!
顺便把做的visio原图放到附件里面。



集合.zip (37.96 KB, 下载次数: 107)

集合总结:
List集合列表,元素是有序的(元素带角标索引,判断有序无序标准是:存入和取出的顺序一致),可以有重复元素,可以有null元素。
|--- ArrayList(JDK1.2)
数据结构:底层的数据结构是数组数据结构。
特点:是查询速度快(因为带角标),但是增删速度稍慢,因为当元素多时,增删一个元素则所有元素的角标都得改变。
线程:线程不同步。
长度:默认长度是10,当超过长度时,按50%延长集合长度用来节约空间。                                   
|--- LinkedList(JDK1.2)
数据结构:底层数据结构式链表数据结构(即后面一个元素记录前一个。
特点:查询速度慢,因为每个元素只知道前面一个元素;但增删速度快因为元素再多,增删一个,只要让其前后的元素重新相连即可。
线程:线程是不同步的。                                                        
|--- Vector(JDK1.0)
数据结构:底层数据结构是数组数据结构。
特点:是查询和增删速度都很慢。
线程:线程同步。
长度:默认长度是10,当超过长度时,100%延长集合长度。
取代:Vector功能跟ArrayList功能一模一样,已被ArrayList替代。
枚举:Enumeration en = v.elements();====>Iterator it =a.Iterator();
枚举就是Vector特有的取出方式。

Set集合:元素是无序的(因为没有索引),元素不可以重复。可以有null元素。
|---HashSet(JDK1.2)
数据结构:底层数据结构是哈希表。
特点:存取速度快、元素唯一。
线程:线程不同步。
保证性元素唯一的原理:是通过元素的两个方法,hashCode()和equals()来完成。如果元素的hashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equalsArrayList判断元素是否相同只依赖于equalsSet判断元素是否相同依赖于hashCodeequals。写集合时要覆写hashCode\equals方法。   
|---TreeSet
数据结构:底层数据结构式二叉树。
特点:元素有序、可以对Set集合中的元素进行排序。
线程:线程不同步。
保证性元素唯一的原理:排序时,当主要条件相同时,一定要判断一下次要条件。当两种排序都存在时,以第二种方式比较器为准。
TreeSet排序的第一种方式:元素本身需要实现Comparable接口,覆盖compareTo方法。让元素自身具备比较性,比如八种基本数据类型或则字符串,实现Compareble接口,覆盖compareTo方法,这种方式也称为元素的自然顺序或者叫默认顺序。
TreeSet排序的第二种方式:另外定义一个类,实现Comparator接口,覆盖compare方法。当元素自身不具备比较性(比如存储学生对象时)或者具备的比较性不是我们所需要的比较性时(比如想字符串的长度排序),此时就需要让集合自身具备自定义的比较性。那如何让集合自身具备比较性呢?可在集合初始化时,就让集合具备比较方式。即定义一个类,实现Comparator接口,覆盖compare方法。

Map集合:该集合存储的是键值对,而且键是唯一的,Map和Set很像,Set集合底层就是使用了Map集合。Map集合没有迭代器,要取出元素必须先将Map集合转换成Set集合才能遍历元素。Map和Set很像,其实Set底层就是使用了Map集合。
|---HashTable(JDK1.0):
底层是哈希表数据结构;
不可以使用null键和null值;
用作键的对象必须实现hashCodeequals方法来保证键的唯一性
线程同步,效率低。
|---HashMap(JDK1.2)
底层是哈希表数据结构;
允许使用null键和null值;线程不同步,效率高;除了这2点相同外,其余HashMapHashMap差不多。
保证元素唯一性的原理:先判断元素的hashCode值是否相同,再判断两元素的equals方法是否为true。往HashSet里面存的自定义元素要覆写写hashCodeequals方法,以保证元素的唯一性!
|---TreeMap(JDK1.0)
底层是二叉树结构;
允许使用null键和null值;
线程不同步;
可以给Map集合中的键进行排序。
TreeMap排序的第一种方式:让元素自身具备比较性,比如八种基本数据类型或则字符串,实现Compareble接口,覆盖compareTo方法,此方式是元素的自然顺序。
TreeMap排序的第二种方式:当元素自身不具备比较性(比如存储学生对象时)或者具备的比较性不是我们所需要的比较性时(比如想字符串的长度排序),此时就需要让集合自身具备自定义的比较性。那如何让集合自身具备比较性呢?可在集合初始化时,就让集合具备比较方式。即定义一个类,实现Comparator接口,覆盖compare方法。
Map扩展
映射关系可以为:一对多、集合的嵌套。


作者: 雨中的台北    时间: 2013-6-19 09:04
总结的不错哟   赞一个{:soso_e100:}
作者: 穆爱明    时间: 2013-6-19 09:35
总结的好详细!学习了
作者: HM张勇    时间: 2013-6-19 10:09
原创很精致,很用心,也很辛苦!谢谢分享!
作者: ㄗs:/|丶hearts    时间: 2013-6-19 15:48
OK                        
作者: 神之梦    时间: 2013-6-19 19:11
{:soso_e179:}
作者: DxxD    时间: 2015-3-23 15:52
看一看。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2