A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马云 中级黑马   /  2012-3-21 13:27  /  1503 人查看  /  0 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

学习框架最主要的是它的结构了吧(还有编程思想,那个态深了,我现在小菜bird的身份还没资格谈那个呢),那JAVA的集合框架也是如此,

首先明确三点,干什么用的,为了什么,怎么用。

我们围绕这个来仔细的把它的框架结构来组织一下,以便在加深理解,
(框架可不是学会用就可以了,在以后发展到高层次的时候会有很多的类似于框架的设计模式,它能在项目中为我们理顺清楚的思路,节省开发时间,可以提高高级别的扩展性。
做为JAVA开发组自己的框架,我们非常有必要了解一下他们的设计结构和思想:

先来个结构图(我们最常用的)

先以我们能理解的方式画啊,不专业啊,(正在学uml等后来再给大家补上正规的图啊)
     collection<interface>(iterator)
                         |-------------List<interface>(ListIterator)
                                     |-------  ArrayList<class>
                                     |------- LinkedList<class>
                                     |------- Vector<class>
                         |-------------Set<interface>
                                     |-------  HashSet<class>
                                     |------- TreeSet<class>
                         |-------------Map<interface>
                                     |------- HashTable<class>
                                     |------- HashMap<class>
                                     |------- TreeMap<class>

集合什么时候用,用时要选择那个子类去实现。
集合的作用,当我们要对一组对象,或都数据进行统一的操作时,为了减少代码量的编写和实现逻辑的统一,这时我们就要以采用集合对象了,(还有其他的一些他家组织组织续上啊),
选用子类对象,
首选把下边的子类对象分为三大类:
list:元素是有序的,元素可以重复,因为该集合体系有索引
set:元素是无序的(存入和取出的顺序不一定一致),不可以重复
map:该集合存储键值对,一对一往里存,而且要保证键的唯一性。

当明确了这三个要求后就可以把范围转到这三个接口的其中一个了,接下来我们再来看三个接口下的子类:
    List:
            ArrayList:底层的数据结构使用的是数组结构(查询快,增删慢,不同步)
       linkedList:底层使用的是链表结构(增删快,查询慢)
       vector:底层是数组数据结构(和ArrayList功能一样,是同步的)(使用时注意他有一个elements()返回个Enumeration对象此对象可以像iterator那样迭代输出元素)

       Set:
           HashSet:底层数据结构是哈希表(HashCode())线程非同步的
               HashSet是如何保证元素唯一性,是通过元素的HashCode值相同,才会判断equals是否为true,如果元素的             hashcode值不同,不会调用equals()

         

           TreeSet
                 可以对Set集合中的元素进行排序
                        底层数据结构是二叉树,保证元素唯一性的依据:compareTo方法Comparable类
TreeSet排序的第一种方式,让元素自身具备比较性元素需要实现Comparable接口,覆盖compareTo方法
第二种方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式,
定义比较器,传给集合对象的构造器Comparator-->compare()


待续  上班ing……

         Map
           该集合存储键值对,一对一往里存,而且要保证键的唯一性。
        |----Hashtable
                底层是哈希表数据结构,不可以存入null键null值,(该集合是线程同步的-效率低)
        |----HashMap
                底层是哈希表数据结构,可以允许使用null键null值(该集合是不同步的-效率高)
        |----TreeMap
                底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序(排序)


根把每个子类的特性和自己的需求去实现子类,

set和list的对比:
     set检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变,无序所存对角唯一,不可以重复存放,
     list和数组类似,list可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变,有序可以重复存放。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马