用数组实现ArrayList

1.使用数组实现ArrayList
package   com.briup.collection;
//使用数组实现
public   class   ArrayList   implements   List {
     private   Object[]   elements ; //数组
     private   int   length ;   //数据的长度
      private   int   size   //当前元素的个数
     public   ArrayList() {
         elements   =   new   Object[10]; //创建一个长度为10的数组
         this . length =10;
    }
     public   ArrayList( int   length ){
         elements   =   new   Object[ length ]; //创建一个长度为length的数组
         this . length = length ;
   }
      //创建检查空间是否足够的方法
     public   void   ensureCap(){
         if   ( size >= length ) {
         Object[]   array = new   Object[ length +10];
         System. arraycopy ( elements , 0,   array , 0,   size );
             elements = array ; //把新数组赋值给旧数组
           length = length +10; //数组的长度增加10
     
    }
   }
     @Override
        //向指定位置添加元素
     public   void   add( int   index , Object   obj ) {
           if ( index <0 ||   index > size ) return ;
           //空间是否足够
         ensureCap();
           for   ( int   i   =   size ;   i   >   index ;   i --) {
             elements [ i ]= elements [ i -1]; //把前一个值赋给后一个值
            
        }
           elements [ index ] =   obj ;
           size ++;
    }
     @Override
     public   void   add(Object   obj ) {
         add( size , obj );
    }
     @Override
     //删除元素
     public   Object remove( int   index ) {
         if ( index <0 ||   index >= size )
             return   null ;
        Object   obj   =   elements [ index ];
           for   ( int   i   =   index ;   i   <   size -1;   i ++) {
             elements [ i ]= elements [ i +1]; //把后一个值赋给前一个值  
        }
            size --;
           elements [ size ]= null ; //把最后一个数据赋值为null1
           return   obj ;
    }
     @Override
//  设置某个位置的数据
     public   void   set( int   index , Object   obj ) {
        if ( index <0 ||   index   >=   size ) return ;
         elements [ index ]= obj ;
    }
     @Override
//  获取数据
     public   Object get( int   index ) {
           if ( index <0 ||   index   >=   size ) return   null ;
        
         return   elements [ index ];
    }
      //获取数据的长度
     @Override
     public   int   size() {
         return   size ;
    }
     @Override
     public   Iterator iterator() {
         return   new   Iterator(){
             //当前位置
             private   int   position =-1;
             public   boolean   hasNext() {
                 if ( position +1< size )
                 return   true ;
             return   false ;
            }
             @Override
             public   Object next() {
                 return   get(++ position );
            }
             @Override
             public   Object remove() {
                
                 return   ArrayList. this .remove( position --);
            }
         };
    }
  
}

2.使用链表实现LinkedList
package   com.briup.collection;
//使用链表实现
public   class   LinkedList   implements   List {
     private   Node   head ; //头结点
     private   int   size ; //当前数据的个数
     public   LinkedList() {
       head   =   new   Node();
   }
     @Override
     public   void   add( int   index , Object   obj ) {
         if ( index <0 ||   index   >   size )   return ;
            Node   curr   =   head ; //当前节点
         for ( int   i =0; i < index ; i ++){
             curr   =   curr . next ;   //  下一个节点作为当前节点。
        }
        Node   node   =   new   Node( obj );
         node . next   =   curr . next ;
         curr . next   =   node ;
         size ++;
    }
     @Override
     public   void   add(Object   obj ) {
           add( size , obj );       
    }
     @Override
     public   Object remove( int   index ) {
         if ( index <0|| index >= size )
             return   null ;
        Node   curr   = head ; //当前节点
        Node   pre   =   null ;
         for   ( int   i   = 0;   i   <= index ;   i ++) {
             pre   =   curr ;
             curr   =   curr . next ;
        }
         pre . next   =   curr . next ;
         curr . next   =   null ;
         size --;
         return   curr .getData();
    }
     @Override
     public   void   set( int   index , Object   obj ) {
            if ( index <0 ||   index >= size )
                 return ;
           Node   curr   =   head ;
             for   ( int   i   = 0;   i   <=   index ;   i ++) {
             curr   = curr . next ;
        }
           curr .setData( obj );
    }
     @Override
     public   Object get( int   index ) {
         if ( index <0 ||   index >= size )
             return   null ;
       Node   curr   =   head ;
         for   ( int   i   = 0;   i   <=   index ;   i ++) {
         curr   = curr . next ;
    }
         return   curr .getData();
    }
     @Override
     public   int   size() {
         //   TODO   自动生成的方法存根
         return   size ;
    }
     @Override
     public   Iterator iterator() {
         //   TODO   自动生成的方法存根
         return   null ;
    }
 
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值