惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
U
Unit 42
月光博客
月光博客
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
D
Docker
Y
Y Combinator Blog
P
Privacy & Cybersecurity Law Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
G
Google Developers Blog
H
Hacker News: Front Page
罗磊的独立博客
博客园 - 【当耐特】
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
P
Palo Alto Networks Blog
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园_首页
H
Help Net Security
SecWiki News
SecWiki News
J
Java Code Geeks
I
InfoQ
T
Troy Hunt's Blog
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Project Zero
Project Zero
Martin Fowler
Martin Fowler
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
The Register - Security
The Register - Security
Cyberwarzone
Cyberwarzone
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
A
Arctic Wolf
P
Privacy International News Feed

博客园 - csdnexpert

美国程序员Peter:落脚北京只因这里的胡同 不是冷饭的冷饭:重评芙蓉姐姐现象 从早晨8点到晚上12点:WebEx合肥CTO的一天 转胡一虎Blog:父亲是我生命中的永恒 十年后,ELM会不会创造SOA现在所创造的局面? 来京两载,今日入清华读书,记一笔 传媒人应该具备的素质:批判 理性 正气 异国也有欢乐:北京Linux User Group探访实录 解释传统与敏捷方法最贴切的故事:大象与猴子 媒体的关键还是在于“软件”(人与规范) “Web开发之华山论剑”制作花絮与推荐导读 利用Radrails开发Ruby on Rails程序入门指南 “悲欣交集”的《开源大本营》制作之路 Alistair讲座的几点感受:纠正对敏捷方法的误解 在Eclipse里实现Ant自动编译 Java之父Gosling:Java没有受到PHP、Ruby或C#的威胁 PC-cillin 2005网络安全版使用简评 为什么刘彻会成为一代名君? 有选择才精彩 到哪里都是从零开始 可怜的微软与项目管理经典图解 从对一篇文章的修改看写作中的主题把握 谁说做软件测试没有好的前途?反驳之 《程序员》第9期:面对多核时代 我们以何应对? 8月的最后一天,我们开赴日照前线 Java Transaction Design Strategies推荐阅读 温总理对读书和思考问题的回答 共享软件大鳄来华抢人 是机遇还是挑战? 只有资源共享 中国共享软件才能突破性发展 又可以写Blog了 心里竟有点小小的激动 反射机制与系统耦合实例详解 事件驱动模型实例详解(Java篇) 商业项目应该向开源项目学习什么? 开源的软件+商业的服务=? 封印的武士 测试Google的网络Office——Writely 《男人装》2006.05 未来技术杂志会走向哪里? 评评点点,程序员的2006世界杯 终于理解了我的作者 你知道的Java,和你不知道的Java [投票]3·15消费者日 《程序员》杂志之现状调查 三言二拍 Eclipse+Tomcat实现Mysql数据库连接 解决在Eclipse中配置JBoss、Tomcat等插件时遇到的问题 Log4j日志管理系统简单使用说明 IntelliJ IDEA使用技巧一览表 我喜欢使用IntelliJ Idea的25个理由 新帆起航,目标新大陆,感谢大家.... 6.26南汇校园行 面向对象的授课感想 反射在Java Swing中的应用 从杭州到北京 华为“新同事文化”:爱你的同事如兄弟 读书的快乐 闻听06年研究生收费有感 用创新产品支撑流体计算 杂拌儿:歪评百度牵手MTV、雅虎推出优化IE7现象 有钱的IBM 有争议的开发者大会 7月最后一天脑袋里的杂事 2006-IBM开发者大会现场组图与技术点(部分) 火锅论坛:要团队不要群体 中国软件的井喷时代 热烈庆祝CSDN 2006年中大会顺利闭幕 听同学谈有中国特色的软件营销模式 马云于“赢在中国”的一些讲话 看图识性格,蛮有意思的,累的时候玩一下:) 8月19日BBUG:电信技术开发经验分享与前景展望 Yahoo!新成立Python开发者中心 推动Python发展 也谈如何举办一场成功的技术讲座? 不满SourceForge服务 JRuby迁移至CodeHaus 看完《天狗》,我对社会充满了失望 从写Blog看技术人员成长6要素 再次慨叹生命的脆弱,我辈当惜之 急雨、泥土与睡觉 Google继续扩张,“魔爪”伸向服务器 感慨国内技术网站的环境 外包,从拧螺丝钉开始 史上最大规模的Agile开源项目Callisto发布 畅快、郁闷、遗憾 阿根廷,让我如何不爱你? 好笑的那几个小时 人是应该有长远目标的 庆祝阿根廷挺进八强 博客究竟能做什么? 对Web标准的9大误解 Slashdot热点一览 Blogger的痛心事——没人回贴 一个责任编辑的日记 你可以赚钱,但你赚不来时间 印度软件外包发展简记 那一段情系列之一:Fangfang 从《读库》关于“报人”文章感叹今日技术媒体 Mop研发团队:网络时代的技术偏执狂(全文) DevCo专家李维推荐的学习方法 英雄迟暮,一声长叹,且看10个可怜的技术天才 《程序员》7月刊即将上市 10大看点值得关注 把软件外包给中国,放心吗? 我也是个博客青苹果 DirectX 10后面的微软牛人们 参加IBM开发者大会前一天
集合框架的授课感想
csdnexpert · 2007-12-17 · via 博客园 - csdnexpert
 

       集合框架 (Collection) 可以说软件编程中过程中极其重要的一个概念,为什么我这里要用“极其”这个词呢?就是因为在我的14个项目研发经验中,几乎每个项目都需要使用集合框架,如果用好了集合框架,那么整个项目将会变得非常灵活,因此在我Softworks中心的培训经历中,我也非常注重对于这个概念的培训。其实比较喜欢在网上浏览技术的同学可能知道,网上有比较流行的32道经典Java面试考题,在这些考题中就有很多是用来考察学员对于集合框架的理解程度的。

       在授课的过程中,我借助了《人月神话》中的5W1H的学习分析方法对于集合框架进行了介绍:

       1What:什么是集合框架,集合框架其实就是一个“垃圾桶”,因为任意对象都可以放入集合框架中。由于数组存在比较明显的缺陷(例如:一次声明所产生的数据类型必须是一致的,数据地址必须是连续的,数组长度是定长的等等),而集合框架比数组更灵活更实用,甚至可以将集合框架中的某些部分理解为数组的包装类。

       2Why集合框架比数组来的更灵活,可以说集合框架完全弥补了数组的一些缺点,虽然操作效率没有数组那么高,但是却可以大大提高软件的开发效率,而且不同的集合框架类可以适用于不同的场合。

       3Where:我们在项目的任何一个角落中都可以使用集合框架,例如,现在我们有2个实体类:顾客类(Customer)和订单类(Order),根据现实情况我们可以明确,一个顾客拥有多张订单,而一个订单只能隶属于一个客户,这个时候由于客户包含了多张订单,那么顾客类就可以用集合框架来存放所有的订单对象了。

       4When:集合框架顾名思义就是某些相关数据的整合个体,那么当我们需要将一些相同特性的个体整合或者说绑定在一起的时候,就可以考虑使用集合框架了,因为集合框架可以保存和帮定这样一些数据。

       5Who所有的Java,.Net程序员都可以使用集合框架,因为现今的面向对象的高级编程语言都提供了集合框架的处理类。

       6How:在理解了集合框架的意义以后我们来看看如何来使用集合框架

       SUN为我们提供了功能强大的JDK(1.5)因此我们可以通过java.util包中看到几乎所有的集合框架类,在讲解具体的集合框架之前我们来看看一些常用的集合类之间的关联关系:

通过上图我们可以看到常用的集合框架的继承支线,黑色的空心三角箭头表示的是接口之间的继承关系,而红色的空心箭头表示的是类对于接口的实现,就我个人的教学经验而言,我比较喜欢的是对比教学法,通过不同的对比教学来阐述类,接口之间的关系和区别,现在叙述如下:

List接口和Set接口的区别在于,List接口可以顺序存放数据,并且数据是允许重复的,而Set接口正好与List接口相反,不能顺序存放数据,也不能存放相同数据。

Map接口和Set接口基本类似,最大的区别在于Map接口要求使用Key-Value映射关系来存放数据,Map要保证Key在集合中是唯一不能重复的。

ArrayListLinkedList所实现的功能完全一样,但是他们在数据结构上有比较明显的区别ArrayList的内部组成是动态数组,因此他的取值速度比较快,而LinkedList的内部组成是单链表,所以对于集合增,删,改的速度比较快。SUN之所以这么设计就是为了使集合框架能适用不同的开发场合。

TreeSetHashSet所实现的功能也是完全一样的,区别在于HashSet在内存中是以Hash算法来进行计算和排列的,因此内存空间并不连续,而TreeSet在散列排序以后,会自动按照字母顺序进行升序排序,由于排序会消耗很多时间,因此TreeSet的效率远远慢于HashSet

       HashMapTreeMap类似于TreeSetHashSet因此此处不再讲解。

       为了帮助学员理解,我布置了一题企业开发过程中一直使用的集合框架的结合对象的开发题目,以此来帮助学员理解集合框架的意义,这个案例要求学员开发一个既具有顺序存储,又能KeyValue映射的集合实体,为了帮助学员完成这项任务我将该类的接口定义如下:

package cn.softworks.common;

import java.util.Iterator;

/**

 *

 *<p>集合综合工具类</p>

 *

 *<p>该类可以实现ArrayList和HashMap的功能,

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

 *

 *<p>Copyright:Copyright(c)2006</p>

 *

 *<p>Company:Softworks</p>

 *

 *@author  Chen.Yu

 *@version1.0

 */

publicinterface IDataCollection {

 /**

   *向当前集合增加对象

   *@paramkey   添加到集合中数据的键值

   *@paramvalue添加到集合中数据的数值

   */

 publicvoid add(Object key, Object value);

 /**

   *向当前集合插入对象

   *@paramindex插入的位置

   *@paramkey   添加到集合中数据的键值

   *@paramvalue添加到集合中数据的数值

   */

 publicvoid add(int index, Object key, Object value);

 /**

   *更新当前集合中的对象

   *@paramindex插入的位置

   *@paramkey   添加到集合中数据的键值

   *@paramvalue添加到集合中数据的数值

   */

 publicvoid set(int index,Object key, Object value);

 /**

   *根据键值从当前集合中得到数据

   *@paramkey添加到集合中数据的键值

   *@return    添加到集合中数据的数值

   */

 public Object get(Object key);

 /**

   *根据索引从当前集合中得到数据

   *@paramindex    索引位置

   *@return         添加到集合中数据的数值

   */

 public Object get(int index);

 /**

   *根据索引从当前集合中得到键值

   *@paramindex    索引位置

   *@return         添加到集合中数据的键值

   */

 public Object getKey(int index);

 /**

   *根据索引从当前集合中得到键值

   *@paramindex    索引位置

   *@return         添加到集合中数据的键值

   */

 publicboolean hasKey(Object key);

 /**

   *根据键值从当前集合中得到改键值的位置

   *@paramindex    索引位置

   *@return         添加到集合中数据的键值

   */

 publicint getPosition(Object key);

 /**

   *根据索引从当前集合中得到删除数据

   *@paramindex    索引位置

   */

 publicvoid remove(int index);

 /**

   *根据键值从当前集合中得到删除数据

   *@paramkey    添加到集合中数据的键值

   */

 publicvoid remove(Object key);

 /**

   *删除集合中所有的数据

   */

 publicvoid clear();

 /**

   *得到集合中数据的个数

   *@return集合中数据的个数

   */

 publicint size();

 /**

   *得到集合中Value的循环器

   *@returnValue的循环器

   */

 public Iterator getValues();

 /**

   *得到集合中Key的循环器

   *@returnKey的循环器

   */

 public Iterator getKeys();

}

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1700800