欢迎来到天天文库
浏览记录
ID:40313357
大小:24.09 KB
页数:6页
时间:2019-07-30
《设计模式之2 iterator》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式之2iterator模拟实现arraylist。packagecom.bjsxt.dp.iterator;importcom.bjsxt.dp.iterator.*;publicclassArrayListimplementsCollection{//初始化就是10个对象Object[]objects=newObject[10];intindex=0;publicvoidadd(Objecto){//如果到达数组上限,就翻倍,并且把原数组里面的所有内容复制到新数组当中if(index==objects.length){Ob
2、ject[]newObjects=newObject[objects.length*2];System.arraycopy(objects,0,newObjects,0,objects.length);//最关键的一步在这里,把老数组的引用指向新数组,那么从arraylist的使用者的角度来说,是看不到内部数组翻倍了。objects=newObjects;}objects[index]=o;index++;}publicintsize(){//返回的是数组当前的index,而不是数组的真实大小returnindex;}//向外提供
3、的iteratorpublicIteratoriterator(){returnnewArrayListIterator();}//通过一个内部类来实现iterator接口。privateclassArrayListIteratorimplementsIterator{privateintcurrentIndex=0;//目前index的值大于数组的size,就没有下一个了。publicbooleanhasNext(){if(currentIndex>=index)returnfalse;elsereturntrue;}//返回当
4、前数组对应的index处的对象,并把游标指向下一个位置publicObjectnext(){Objecto=objects[currentIndex];currentIndex++;returno;}}}通过一个通用的接口,collection。packagecom.bjsxt.dp.iterator;//通过接口,约束方法的名字publicinterfaceCollection{voidadd(Objecto);intsize();//指定了容器类必须提供iterator方法,这个方法的返回值是IteratorIteratori
5、terator();}通过另外一个接口,iteratorpackagecom.bjsxt.dp.iterator;publicinterfaceIterator{//两个方法,第一是返回一个object对象,第二是看还有没有下一个节点。Objectnext();booleanhasNext();}对于linklist,里面放的元素是node:packagecom.bjsxt.dp.iterator;publicclassNode{//node的构造方法,传递两个参数,第一是数据本身,第二就是指向下一个节点的nextpublicNo
6、de(Objectdata,Nodenext){super();this.data=data;this.next=next;}publicObjectgetData(){returndata;}publicvoidsetData(Objectdata){this.data=data;}publicNodegetNext(){returnnext;}publicvoidsetNext(Nodenext){this.next=next;}privateObjectdata;privateNodenext;}linkedlistpack
7、agecom.bjsxt.dp.iterator;importcom.bjsxt.dp.iterator.Collection;publicclassLinkedListimplementsCollection{//第一个节点Nodehead=null;//最后一个节点Nodetail=null;//大小intsize=0;//添加项目的方法publicvoidadd(Objecto){//添加的第一个节点Noden=newNode(o,null);//只有一个节点的情况,它既是头又是尾if(head==null){head=n;
8、tail=n;}//每次在最后添加节点,把上一个节点的next指向新添加的节点,并把新节点的next指向null//当前tail(也就是现在list当中的最后一个元素)的next指向新节点tail.setNext(n);//新节点成为新的tail,
此文档下载收益归作者所有