java链表的基本使用 (购物车)代码

package test;
 interface ILink<E>{
     public void add(E e);//添加链表数据
     public int size();//返回链表长度
     public boolean isEmpty();//判断链表是否为空
     public Object [] toArray();//返回集合数据
     public E get(int index);//返回指定索引的数据
     public void set(int index,E data);//修改值
     public boolean contains(E data);//判断指定数据是否存在
     public void remove(E data);//删除指定数据
     public void clean();//清空
 }
 class LinkImpl<E> implements ILink<E>{
     private class Node{//保存节点的数据关系
         private E data;
         private Node next;//保存下一个引用
         private Node(E data) {
             this.data=data;
         }
         //第一次调用
         public void addNode(Node newNode) {
             //保存新的Node数据
            if(this.next==null) {
                this.next =newNode;
            }else {
                this.next.addNode(newNode);
            }
         }
         public void toArrayNode() {
             LinkImpl.this.returnData [LinkImpl.this.foot ++]=this.data;
         if(this.next!=null) {
             this.next.toArrayNode();
         }
         }
         public E getNode(int index) {
             if(LinkImpl.this.foot ++ ==index) {
                 return this.data;        
             }
             else {
                return this.next.getNode(index);        
             }
         }
         public void setNode(int index,E data) {
             if(LinkImpl.this.foot ++ ==index) {
                   this.data=data;
                
             }
             else {
                  this.next.getNode(index);
            
             }
         }
    public boolean containsNode(E data) {
        if(this.data.equals(data)) {
            return true;
        }
        else{
              if(this.next==null) {
                  return false;
              }else {
                  
                 return this.next.containsNode(data);
              }
          }
    }
    public void removeNode(Node previous,E data) {
        if(this.data.equals(data)) {
            previous.next=this.next;
        }else {
            if(this.next!=null) {
                this.next.removeNode(this, data);
            }
        }
    }    
        
        
     }
     private Node root;
     private int count;//增加数据
     private int foot;
     private Object[] returnData;
    public void add(E e) {
         if(e==null) { return ;
         }else {
             Node newNode = new Node(e);//创建新节点
             if(this.root==null) {
                 this.root=newNode;
             }
             else {
                 this.root.addNode(newNode);
             }        
             this.count++;
         }
     }
    @Override
    public int size() {
        // TODO Auto-generated method stub
        return this.count;
    }
    @Override
    public boolean isEmpty() {
         //this.count==0
        return this.root==null;
    }
    @Override
    public Object[] toArray() {
         if(this.isEmpty()) {
             return null;
         }
         this.foot=0;
         this.returnData=new Object[this.count];
         this.root.toArrayNode();
         return this.returnData;
    
    }
    @Override
    public E get(int index) {
     if(index>this.count) {
         return null;
     }
     this.foot=0;
    return this.root.getNode(index);
    }
    @Override
    public void set(int index, E data) {
         if(index>=this.count) {
             return ;
         }
         this.foot=0;
         this.root.setNode(index, data);
        
    }
    @Override
    public boolean contains(E data) {
         if(data==null) {
             return false;
         }
        return this.root.containsNode(data);
    }
    @Override
    public void remove(E data) {
     if(this.contains(data)) {
         if(this.root.data==data) {
             this.root=this.root.next;
         }else {
             this.root.next.removeNode(this.root, data);
         }
         this.count--;
     }
        
    }
    @Override
    public void clean() {
        this.root=null;
        this.count=0;
        
    }
 }
  interface IGoods{//商品标准
    public String getName();  
    public double getPrice();
  }
  interface IShopCar{//购物车的标准
      public void add(IGoods goods);//添加商品信息
      public void delete(IGoods goods);//删除商品
      public Object[] getAll();//获得购物车中的全部商品信息
  }
  class shopCarImpl implements IShopCar{
      private ILink<IGoods> allGoodses =new LinkImpl<IGoods>();

    @Override
    public void add(IGoods goods) {
         this.allGoodses.add(goods);
        
    }

    @Override
    public void delete(IGoods goods) {
         this.allGoodses.remove(goods);
        
    }

    @Override
    public Object[] getAll() {
        // TODO Auto-generated method stub
        return this.allGoodses.toArray();
    }
      
  }
  class Cashier{//收银台
      public IShopCar shopcar;
      public Cashier(IShopCar shopcar) {
          this.shopcar=shopcar;
      }
      public double allPrice() {//计算总价
          double sum=0.0;
        Object[] all = this.shopcar.getAll();
        for(Object obj:all) {
            IGoods goods=(IGoods)obj;
            sum+=goods.getPrice();
        }
        return sum;
        
      }
      public int allCount() {
          return this.shopcar.getAll().length;
      }
      
  }
    class Book implements IGoods{
        private String name;
        private double price;
        public Book(String name,double price) {
            this.name=name;
            this.price=price;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public boolean equals(Object obj) {
            if(obj==null) {
                return false;
            }
            if(this==obj) {
                return true;
            }
            if(!(obj instanceof Book)) {
                return false;
            }
            Book book=(Book)obj;
            return this.name.equals(book.name)&&
                    this.price==book.price;
            
        }
        public String toString() {
            return "【图书信息】:name="+this.name
                    +"price="+this.price;
        }
    }
 
    class Bag implements IGoods{
        private String name;
        private double price;
        public Bag(String name,double price) {
            this.name=name;
            this.price=price;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public boolean equals(Object obj) {
            if(obj==null) {
                return false;
            }
            if(this==obj) {
                return true;
            }
            if(!(obj instanceof Book)) {
                return false;
            }
            Bag bag=(Bag)obj;
            return this.name.equals(bag.name)&&
                    this.price==bag.price;
            
        }
        public String toString() {
            return "【背包信息】:name="+this.name
                    +"price="+this.price;
        }
    }
    
public class Test1 {
     public static void main(String[] args) throws Exception {
     IShopCar car = new shopCarImpl();
       car.add(new Book("java开发", 40));
       car.add(new Book("Oracle",24));
       car.add(new Bag("小熊背包", 88));
        Cashier cashier = new Cashier(car);
        System.out.println(cashier.allPrice());
        
    }
 
}

  

posted @ 2020-04-06 20:48  下饭  阅读(347)  评论(0编辑  收藏  举报