本帖最后由 卢祥洲 于 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值不同,不会调用equals。ArrayList判断元素是否相同只依赖于equals,Set判断元素是否相同依赖于hashCode和equals。写集合时要覆写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值; 用作键的对象必须实现hashCode和equals方法来保证键的唯一性 线程同步,效率低。 |---HashMap(JDK1.2)底层是哈希表数据结构; 允许使用null键和null值;线程不同步,效率高;除了这2点相同外,其余HashMap和HashMap差不多。 保证元素唯一性的原理:先判断元素的hashCode值是否相同,再判断两元素的equals方法是否为true。往HashSet里面存的自定义元素要覆写写hashCode和equals方法,以保证元素的唯一性! |---TreeMap(JDK1.0)底层是二叉树结构; 允许使用null键和null值; 线程不同步; 可以给Map集合中的键进行排序。 TreeMap排序的第一种方式:让元素自身具备比较性,比如八种基本数据类型或则字符串,实现Compareble接口,覆盖compareTo方法,此方式是元素的自然顺序。 TreeMap排序的第二种方式:当元素自身不具备比较性(比如存储学生对象时)或者具备的比较性不是我们所需要的比较性时(比如想字符串的长度排序),此时就需要让集合自身具备自定义的比较性。那如何让集合自身具备比较性呢?可在集合初始化时,就让集合具备比较方式。即定义一个类,实现Comparator接口,覆盖compare方法。 Map扩展映射关系可以为:一对多、集合的嵌套。
|