迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。
这句话包含两层意思:一是聚集对象;二是迭代器遍历对象。
迭代主要在集合类中应用,在开发过程极少用到,主要作用是理解集合。
一:数组的迭代
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));
}
}