集合框架的授课感想

 
       集合框架 (Collection) 可以说软件编程中过程中极其重要的一个概念 , 为什么我这里要用“极其”这个词呢?就是因为在我的 14 个项目研发经验中,几乎每个项目都需要使用集合框架,如果用好了集合框架,那么整个项目将会变得非常灵活,因此在我 Softworks中心 的培训经历中,我也非常注重对于这个概念的培训。其实比较喜欢在网上浏览技术的同学可能知道,网上有比较流行的 32 道经典 Java 面试考题,在这些考题中就有很多是用来考察学员对于集合框架的理解程度的。
       在授课的过程中,我借助了《人月神话》中的 5W1H 的学习分析方法对于集合框架进行了介绍:
       1 What :什么是集合框架,集合框架其实就是一个“垃圾桶”,因为任意对象都可以放入集合框架中。由于数组存在比较明显的缺陷(例如:一次声明所产生的数据类型必须是一致的,数据地址必须是连续的,数组长度是定长的等等),而集合框架比数组更灵活更实用,甚至可以将集合框架中的某些部分理解为数组的包装类。
       2 Why 集合框架比数组来的更灵活,可以说集合框架完全弥补了数组的一些缺点,虽然操作效率没有数组那么高,但是却可以大大提高软件的开发效率,而且不同的集合框架类可以适用于不同的场合。
       3 Where :我们在项目的任何一个角落中都可以使用集合框架,例如,现在我们有 2 个实体类:顾客类 (Customer) 和订单类 (Order) ,根据现实情况我们可以明确,一个顾客拥有多张订单,而一个订单只能隶属于一个客户,这个时候由于客户包含了多张订单,那么顾客类就可以用集合框架来存放所有的订单对象了。
       4 When :集合框架顾名思义就是某些相关数据的整合个体,那么当我们需要将一些相同特性的个体整合或者说绑定在一起的时候,就可以考虑使用集合框架了,因为集合框架可以保存和帮定这样一些数据。
       5 Who 所有的 Java,.Net 程序员都可以使用集合框架,因为现今的面向对象的高级编程语言都提供了集合框架的处理类。
       6 How :在理解了集合框架的意义以后我们来看看如何来使用集合框架
       SUN 为我们提供了功能强大的 JDK(1.5) 因此我们可以通过 java.util 包中看到几乎所有的集合框架类,在讲解具体的集合框架之前我们来看看一些常用的集合类之间的关联关系 :
 
 
通过上图我们可以看到常用的集合框架的继承支线,黑色的空心三角箭头表示的是接口之间的继承关系,而红色的空心箭头表示的是类对于接口的实现,就我个人的教学经验而言,我比较喜欢的是对比教学法,通过不同的对比教学来阐述类,接口之间的关系和区别,现在叙述如下:
List 接口和 Set 接口的区别在于, List 接口可以顺序存放数据,并且数据是允许重复的,而 Set 接口正好与 List 接口相反,不能顺序存放数据,也不能存放相同数据。
Map 接口和 Set 接口基本类似,最大的区别在于 Map 接口要求使用 Key-Value 映射关系来存放数据, Map 要保证 Key 在集合中是唯一不能重复的。
ArrayList LinkedList 所实现的功能完全一样,但是他们在数据结构上有比较明显的区别 ArrayList 的内部组成是动态数组,因此他的取值速度比较快,而 LinkedList 的内部组成是单链表,所以对于集合增,删,改的速度比较快。 SUN 之所以这么设计就是为了使集合框架能适用不同的开发场合。
TreeSet HashSet 所实现的功能也是完全一样的,区别在于 HashSet 在内存中是以 Hash 算法来进行计算和排列的,因此内存空间并不连续,而 TreeSet 在散列排序以后,会自动按照字母顺序进行升序排序,由于排序会消耗很多时间,因此 TreeSet 的效率远远慢于 HashSet
       HashMap TreeMap 类似于 TreeSet HashSet 因此此处不再讲解。
       为了帮助学员理解,我布置了一题企业开发过程中一直使用的集合框架的结合对象的开发题目,以此来帮助学员理解集合框架的意义,这个案例要求学员开发一个既具有顺序存储,又能 Key Value 映射的集合实体,为了帮助学员完成这项任务我将该类的接口定义如下:
package cn.softworks.common;
 
import java.util.Iterator;
/**
  *
  *

集合综合工具类

  *
  *

该类可以实现ArrayList和HashMap的功能,

  *     既可以实现顺序存储又可以Key - Value 映射

  *
  *

Copyright:Copyright(c)2006

  *
  *

Company:Softworks

  *
  * @author   Chen.Yu
  * @version 1.0
  */
public interface IDataCollection {
 
  /**
   * 向当前集合增加对象
   * @param key    添加到集合中数据的键值
   * @param value 添加到集合中数据的数值
   */
  public void add(Object key, Object value);
 
  /**
   * 向当前集合插入对象
   * @param index 插入的位置
   * @param key    添加到集合中数据的键值
   * @param value 添加到集合中数据的数值
   */
  public void add( int index, Object key, Object value);
 
  /**
   * 更新当前集合中的对象
   * @param index 插入的位置
   * @param key    添加到集合中数据的键值
   * @param value 添加到集合中数据的数值
   */
  public void set( int index,Object key, Object value);
 
  /**
   * 根据键值从当前集合中得到数据
   * @param key 添加到集合中数据的键值
   * @return     添加到集合中数据的数值
   */
  public Object get(Object key);
 
  /**
   * 根据索引从当前集合中得到数据
   * @param index     索引位置
   * @return          添加到集合中数据的数值
   */
  public Object get( int index);
 
  /**
   * 根据索引从当前集合中得到键值
   * @param index     索引位置
   * @return          添加到集合中数据的键值
   */
  public Object getKey( int index);
 
  /**
   * 根据索引从当前集合中得到键值
   * @param index     索引位置
   * @return          添加到集合中数据的键值
   */
  public boolean hasKey(Object key);
 
  /**
   * 根据键值从当前集合中得到改键值的位置
   * @param index     索引位置
   * @return          添加到集合中数据的键值
   */
  public int getPosition(Object key);
 
  /**
   * 根据索引从当前集合中得到删除数据
   * @param index     索引位置
   */
  public void remove( int index);
 
  /**
   * 根据键值从当前集合中得到删除数据
   * @param key     添加到集合中数据的键值
   */
  public void remove(Object key);
 
  /**
   * 删除集合中所有的数据
   */
  public void clear();
 
  /**
   * 得到集合中数据的个数
   * @return 集合中数据的个数
   */
  public int size();
 
  /**
   * 得到集合中Value的循环器
   * @return Value 的循环器
   */
  public Iterator getValues();
 
  /**
   * 得到集合中Key的循环器
   * @return Key 的循环器
   */
  public Iterator getKeys();
 
}
 
该接口的实现可以访问 :http://www.softworks.cn 下载。
上海Softworks软件人才培训中心
电话:021-53086530    53086531
地址:上海市北京东路668号科技京城东楼9楼E座
网址:
www.softworks.cn
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值