データ構造--ArayListの実現原理ソース


1)テーマ:ArayListの実現原理ソース
2)考え方:順序表ArayListは、配列で表し、一連の連続アドレス空間.その実施方法は、
 
  • リニアテーブルArayListを初期化する
  • 、線形テーブルの末尾に要素add(E e)
  • を追加する.
  • は、udateを更新し、第index各データをudate(E e,int index)
  • に置換する.
  • 指定された位置の要素removeToIndexを削除する
  • .スケーリングに従って要素値get(int index)
  • を返す.
  • は、テーブル容量が所定の大きさを超えているかどうかを判断し、自動拡張容量ensureCapacity()
  • を超えると、自動的に拡張される.
  • は、順序表の実際の表長sizeに戻る()
  • は、テーブル容量length()
  • に戻る.
  •  判断表が空isEmptyかどうか()
  • 指定サイズのランダムシーケンステーブルinitRamdomListを初期化する
  • 指定サイズの非降順順順順テーブルinitNotDecsを初期化する
  • 指定サイズの昇順順テーブルinitacsを初期化する
  • 指定サイズの降順順順テーブルinitDecsを初期化する
  • は、シーケンステーブルのエルゴードデータtoStering()
  • を返す.
    3)コード実現:
    package com.sam.datastruct.arrayList;
    
    import java.util.Arrays;
    import java.util.Date;
    import java.util.Random;
     
    /**
    *    ArrayList,     。         
    * @author LH-PC
    * @param 
    */
     public class ArrayList {
         private Object[] data = null; //data             
         private int length; //      
         private int current; //    
         
         /**
          *         10
          */
         public ArrayList(){
             this(10);
         }
         
         
         /**
          *       ,      
          * @param initialSize     
          */
         public ArrayList(int initialSize){
             if(initialSize >= 0){
                 this.length = initialSize; //       
                 this.data = new Object[initialSize]; //     
                 this.current = 0; //     0
             }else {
                 throw new RuntimeException("         0:" + initialSize); //    
             }
             
         }
         
         
         /**
          *           ,               
          * @param e      
          * @return      
          */
         public boolean add(E e){
             //      
             ensureCapacity();
             //          
             this.data[current++] = e;  
     //        ++current; //  ++
             return true;
         }
         
         /**
          *             ,               
          * @param e      
          * @param index        
          * @return      
          */
         public boolean add(E e, int index){
            if (index < 0 || index > current) { //          ,     false
              System.err.print(new Date() + ":      ");
             return false;
          }
           //      
             ensureCapacity();
             // index          
             for (int i = ++current; i > index; --i) {
             this.data[i] = data[i - 1];
          }
             data[index] = e;
            return true;
         }
         //  index      
         public boolean update(E e, int index){
            if (index < 0 || index >= current) {
               System.err.print(new Date() + ":      ");
            }
            data[index] = e;
            return true;
         }
         
         public boolean remove(){
            data[--current] = null;
            return true;
         }
         
         /**
          *          
          * @param index
          * @return
          */
         public boolean removeToIndex(int index){
             //       :                  。
             //          ,                  。            
             //a b c 
             //0 1 2
             //data[index] = data[index + 1];  //      
             //data                             //        
             //           ,         
             if(index < 0 || index >= current){  //  index      ,  false
                 System.err.print(new Date() + ":      ");
                 return false;
             }
             for (int i = index; i < current - 1; i++) {
                 data[i] = data[i+1]; //      
             }
             data[--current] = null;  //               null
    //         --current;  //    -1
             return true;
         }
         
         
         /**
          *          
          * @param index
          * @return
          */
         public E get(int index){
             if(index >= 0){
                 return (E) data[index];
             }else {
                 throw new RuntimeException("      0:" + index);
             }    
         }
         
         /**
          *              ,           
          * 
          */
         public void ensureCapacity(){
             //                
             if(current >= length){
                 length *= 2; //      *2
                 data = Arrays.copyOf(data, length);  //        
             }
             
         }
         
     
         /**
          *          
          * @return
          */
         public int size(){
             return this.current;
         }
         
         /**
          *      
          * @return
          */
         public int length(){
             return this.length;
         }
         
         /**
          * 
          *        
          * @param args
          */
         public boolean isEmpty(){
             //return (current == 0) ? true : false;
             return current == 0; //  current == 0,       ,     
         }
         
         /**
          *              
          * @param size
          */
         public void initRamdomList(int size){
            Random random = new Random();
            StringBuffer sb = new StringBuffer();
            for(current = 0; current < size; ++current){
               ensureCapacity();
               data[current] = random.nextInt(200);
               sb.append("," + data[current]);
            }
            System.out.println(sb.length() > 0 ? sb.substring(1) : "");
            
         }
         
         /**
          *                
          * @param size
          */
         public void initNotDecs(int size){
            ensureCapacity();
            StringBuffer sb = new StringBuffer();
            Random random = new Random();
            data[0] = 1;
            System.out.print(data[0]);
            for(current = 1; current < size; ++current){
               ensureCapacity();
               data[current] = (Integer)data[(current - 1)] + random.nextInt(5);
               sb.append("," + data[current]);
            }
            System.out.println(sb.length() > 0 ? sb.toString() : "");
         }
         
         /**
          *              
          * @param size
          */
         public void initacs(int size){
            ensureCapacity();
            StringBuffer sb = new StringBuffer();
            Random random = new Random();
            data[0] = 1;
            System.out.print(data[0]);
            for(current = 1; current < size; ++current){
               ensureCapacity();
               data[current] = (Integer)data[(current - 1)] + 1 + random.nextInt(5);
               sb.append("," + data[current]);
            }
            System.out.println(sb.length() > 0 ? sb.toString() : "");
         }
         
         /**
          *              
          * @param size
          */
         public void initDecs(int size){
            StringBuffer sb = new StringBuffer();
            for(current = 0; current < size; ++current){
               ensureCapacity();
               data[current] = size - current;
               sb.append("," + data[current]);
            }
            System.out.println(sb.length() > 0 ? sb.substring(1) : "");
         }
         
         /**
          *           
          * @return string a[0],a[1],...,a[n]
          */
         public String toString(){
            StringBuffer sb = new StringBuffer();
            for(int i = 0; i < this.current; ++i){
               sb.append("," + this.data[i]);
            }
            if (sb.length() > 0) {
             return sb.substring(1);
          }
            return "";
         }
         
         //     
         public static void main(String[] args) {
             ArrayList list = new ArrayList(); //  arrayList
    //         for (int i = 1; i <= 22; i++) {
    //             list.add(i);
    //         }
    //         list.removeToIndex(0);
    //         list.add(2, 1);
     //        list.removeToIndex(list.size());
             //  list  
    //         for (int i = 0; i < list.size(); i++) {
    //             System.out.println(list.get(i));
    //         }
    //         list.initRamdomList(20);
    //         list.initacs(10);
             list.initDecs(20);
             list.remove();
             System.out.println(list.toString());
         }
     
     }