学习框架最主要的是它的结构了吧(还有编程思想,那个态深了,我现在小菜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可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变,有序可以重复存放。 |