您的位置:首页 > 其它

设计模式二(迭代子模式 Iterator)

2017-03-13 10:05 387 查看
迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。

这句话包含两层意思:一是聚集对象;二是迭代器遍历对象。

迭代主要在集合类中应用,在开发过程极少用到,主要作用是理解集合。

一:数组的迭代

1、定一个数据集合类。

package interator.arrayList;

/**
* 数组对象的集合
* */
public class ArrayList<T>{

private Object[] objs = new Object[10];
private int index = 0;

public void add(T obj) {
if(index==objs.length){
Object[] newObjs = new Object[index+10];
System.arraycopy(objs, 0, newObjs, 0, newObjs.length);
objs = newObjs;
}
objs[index] = obj;
index++;
}

public T get(int i) {
if(i>=0 && i<=this.index){
return (T)objs[i];
}
else{
return null;
}

}

public T First() {
return this.get(0);
}

public T Last() {
return this.get(this.index-1);
}

public int length(){
return this.index;
}

}
2、定一个cat.java类、Dog.java类

package interator.arrayList;

public class Cat{

private String name;
private int old;

public Cat(String name,int old){
this.name = name;
this.old = old;
}

@Override
public String toString(){
return this.getClass().getName() + ",name:"+this.name+",old:"+this.old;
}

}


package interator.arrayList;

public class Dog{

private String name;
private int old;

public Dog(String name,int old){
this.name = name;
this.old = old;
}

@Override
public String toString(){
return this.getClass().getName() + ",name:"+this.name+",old:"+this.old;
}

}

3、测试代码

package interator.arrayList;

public class Main {
public static void main(String arg[]){

ArrayList<Cat> carArry = new ArrayList<>();
carArry.add(new Cat("cat1",1));
carArry.add(new Cat("cat2",2));
carArry.add(new Cat("cat3",3));

for (int i=0;i<carArry.length();i++) {
String str = carArry.get(i).toString();
System.out.println(str);
}

ArrayList<Dog> dogArry = new ArrayList<>();
dogArry.add(new Dog("dog1",1));
dogArry.add(new Dog("dog2",2));
dogArry.add(new Dog("dog3",3));

for (int i=0;i<carArry.length();i++) {
String str = dogArry.get(i).toString();
System.out.println(str);
}

}
}


二:链表的迭代

1、定义节点:

package interator.arrayList;

public class Node {

private Node next;
private Object obj;

public Node(Node node,Object obj){
super();
this.next = node;
this.obj = obj;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}

public Object getObj() {
return obj;
}

public void setObj(Object obj) {
this.obj = obj;
}

}


2、定义链表集合迭代器:

package interator.arrayList;

public class LinkedList<T> {

private Node head = null;
private Node tail = null;

private int size = 0;

public void add(T obj){
if(obj==null){
return;
}
else{
if(head==null){
head = new Node(null,obj);
tail = new Node(null,null);
head.setNext(tail);
}
else{
Node n = new Node(null,null);
tail.setObj(obj);
tail.setNext(n);
tail = n;
}
this.size++;
}
}

public int size(){
return this.size;
}

public T getFirst(){
return (T) this.head.getObj();
}

public T get(int i){
if(i>=0 && i<=this.size-1){
Node node = this.head;
for(int ii=0;ii<this.size;ii++){
if(ii==i){
return (T) node.getObj();
}
else{
node = node.getNext();
}
}
}
return null;
}
}
3、测试数据

package interator.arrayList;

public class LinkedListMain {
public static void main(String args[]){
LinkedList<Cat> linkedList = new LinkedList<>();
linkedList.add(new Cat("cat1",1));
linkedList.add(new Cat("cat2",2));
linkedList.add(new Cat("cat3",3));

System.out.println(linkedList.getFirst());
System.out.println(linkedList.size());
System.out.println(linkedList.get(2));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: