仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1191|回复: 19
打印 上一主题 下一主题

[学习教程] 来看Java源码剖析:深切切磋Iterator形式

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:33:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。
java.util包中包括了一系列主要的汇合类。本文将从剖析源码动手,深切研讨一个汇合类的外部布局,和遍历汇合的迭代形式的源码完成内情。
上面我们先复杂会商一个根接口Collection,然后剖析一个笼统类AbstractList和它的对应Iterator接口,并细心研讨迭代子形式的完成道理。
本文会商的源代码版本是JDK1.4.2,由于JDK1.5在java.util中利用了良多泛型代码,为了简化成绩,以是我们仍是会商1.4版本的代码。
汇合类的根接口Collection
Collection接口是一切汇合类的根范例。它的一个次要的接口办法是:
booleanadd(Objectc)
add()办法将增加一个新元素。注重这个办法会前往一个boolean,可是前往值不是暗示增加乐成与否。细心浏览doc能够看到,Collection划定:假如一个汇合回绝增加这个元素,不管任何缘故原由,都必需抛出非常。这个前往值暗示的意义是add()办法实行后,汇合的内容是不是改动了(就是元素有没有数目,地位等变更),这是由详细类完成的。即:假如办法堕落,总会抛出非常;前往值仅仅暗示该办法实行后这个Collection的内容有没有变更。
相似的另有:
booleanaddAll(Collectionc);
booleanremove(Objecto);
booleanremoveAll(Collectionc);
booleanremainAll(Collectionc);
Object[]toArray()办法很复杂,把汇合转换成数组前往。Object[]toArray(Object[]a)办法就有点庞大了,起首,前往的Object[]仍旧是把汇合的一切元素酿成的数组,可是范例和参数a的范例是不异的,好比实行:
String[]o=(String[])c.toArray(newString[0]);
失掉的o实践范例是String[]。
其次,假如参数a的巨细装不下汇合的一切元素,前往的将是一个新的数组。假如参数a的巨细能装下汇合的一切元素,则前往的仍是a,但a的内容用汇合的元从来添补。特别要注重的是,假如a的巨细比汇合元素的个数还多,a前面的部分全体被置为null。
最初一个最主要的办法是iterator(),前往一个Iterator(迭代子),用于遍历汇合的一切元素。
用Iterator形式完成遍历汇合
Iterator形式是用于遍历汇合类的尺度会见办法。它能够把会见逻辑从分歧范例的汇合类中笼统出来,从而制止向客户端表露汇合的外部布局。
比方,假如没有利用Iterator,遍历一个数组的办法是利用索引:
for(inti=0;i<array.size();i++){...get(i)...}
而会见一个链表(LinkedList)又必需利用while轮回:
while((e=e.next())!=null){...e.data()...}
以上两种办法客户端都必需事前晓得汇合的外部布局,会见代码和汇合自己是紧耦合,没法将会见逻辑从汇合类和客户端代码平分离出来,每种汇合对应一种遍历办法,客户端代码没法复用。
更可怕的是,假如今后必要把ArrayList改换为LinkedList,则本来的客户端代码必需全体重写。
为办理以上成绩,Iterator形式老是用统一种逻辑来遍历汇合:
for(Iteratorit=c.iterater();it.hasNext();){...}
奥妙在于客户端本身不保护遍历汇合的"指针",一切的外部形态(如以后元素地位,是不是有下一个元素)都由Iterator来保护,而这个Iterator由汇合类经由过程工场办法天生,因而,它晓得怎样遍历全部汇合。
客户端从不间接和汇合类打交道,它老是把持Iterator,向它发送"向前","向后","取以后元素"的命令,就能够直接遍历全部汇合。
起首看看java.util.Iterator接口的界说:
publicinterfaceIterator{
 booleanhasNext();
 Objectnext();
 voidremove();
}
依附前两个办法就可以完成遍历,典范的代码以下:
for(Iteratorit=c.iterator();it.hasNext();){
 Objecto=it.next();
 //对o的操纵...
}
在JDK1.5中,还对下面的代码在语法上作了简化:
//Type是详细的范例,如String。
for(Typet:c){
//对t的操纵...
}
每种汇合类前往的Iterator详细范例大概分歧,Array大概前往ArrayIterator,Set大概前往SetIterator,Tree大概前往TreeIterator,可是它们都完成了Iterator接口,因而,客户端不体贴究竟是哪一种Iterator,它只必要取得这个Iterator接口便可,这就是面向对象的能力。
<p>
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看net网页编程Beans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。
老尸 该用户已被删除
沙发
发表于 2015-1-21 10:04:08 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
爱飞 该用户已被删除
板凳
发表于 2015-1-23 15:18:57 | 只看该作者
是一种使用者不需花费很多时间学习的语言
山那边是海 该用户已被删除
地板
发表于 2015-1-24 16:51:22 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
若相依 该用户已被删除
5#
发表于 2015-1-28 05:19:36 来自手机 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
6#
发表于 2015-1-30 23:45:36 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
若天明 该用户已被删除
7#
发表于 2015-2-6 17:03:52 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
小魔女 该用户已被删除
8#
发表于 2015-2-17 11:01:50 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
活着的死人 该用户已被删除
9#
发表于 2015-3-2 23:55:34 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
不帅 该用户已被删除
10#
发表于 2015-3-8 17:21:23 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
小女巫 该用户已被删除
11#
发表于 2015-3-9 16:25:43 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
飘飘悠悠 该用户已被删除
12#
发表于 2015-3-11 10:21:57 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
第二个灵魂 该用户已被删除
13#
发表于 2015-3-11 16:48:07 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
精灵巫婆 该用户已被删除
14#
发表于 2015-3-18 08:08:57 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
admin 该用户已被删除
15#
发表于 2015-3-21 21:12:34 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
金色的骷髅 该用户已被删除
16#
发表于 2015-3-25 07:46:29 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
灵魂腐蚀 该用户已被删除
17#
发表于 2015-4-4 04:00:17 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
兰色精灵 该用户已被删除
18#
发表于 2015-4-7 12:56:17 | 只看该作者
是一种为 Internet发展的计算机语言
柔情似水 该用户已被删除
19#
发表于 2015-5-6 02:09:00 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
因胸联盟 该用户已被删除
20#
发表于 2015-6-10 14:38:27 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 14:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表