Iterator 和 for的性能比较:
1:线性表和链式表
Iterator 集合框架中的接口,主要用于迭代集合中的元素,而对于像LinkedList,如果你用For循环,则LinkedList的get()方法效率是非常低的,因为它每次访问一个元素都要从头开始。而对于Iterator来说,它就像你用吸管从饮料瓶吸饮料一样,每吸一口就消耗掉一点,它的迭代效率很高。
使用迭代模式的优点:
1,实现功能分离,简化容器接口。让容器只实现本身的基本功能,把迭代功能委让给外部类实现,符合类的设计原则。
2,隐藏容器的实现细节。
3,为容器或其子容器提供了一个统一接口,一方面方便调用;另一方面使得调用者不必关注迭代器的实现细节。
4,可以为容器或其子容器实现不同的迭代方法或多个迭代方法。
package Method;
/**
* 链表节点
* @author wm
*
*/
public class LinkNode {
private Object obj; //节点内的数据
private LinkNode childNode; //保存对下一个节点
private LinkNode parentNode; //保存对上一个节点
public LinkNode(Object obj){
this.obj=obj;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public LinkNode getChildNode() {
return childNode;
}
public void setChildNode(LinkNode childNode) {
this.childNode = childNode;
}
public LinkNode getParentNode() {
return parentNode;
}
public void setParentNode(LinkNode parentNode) {
this.parentNode = parentNode;
}
}
package Method;
public class LinkList {
private LinkNode first=null;
private LinkNode last=null;
/**
* 添加节点信息
* @param obj
*/
public void addNode(Object obj){
LinkNode newnode=new LinkNode(obj);
if(first==null){
first=newnode;
last=newnode;
}else{
LinkNode node=first;
while(node.getChild()!=null){
node=node.getChild();
}
node.setChild(newnode);
newnode.setParent(node);//把这个节点作为父节点
last=newnode;
}
}
/**
* 向指定链表添加元素的方法
* @param obj 插入的元素
*/
public void add(Object obj){
LinkNode newnode=new LinkNode(obj);
if(first==null){//如果链表为空
first = newnode;
}else{
last=newnode;//先把新增结点放在最后
}
last=newnode;//再把最后一个结点向后移位
}
}