Javaデータ構造のカスタム実装Listセット

18673 ワード

Javaカスタム実装Listセット
文書ディレクトリ
  • Javaカスタム実装Listセット
  • 1.配列実装
  • 1.1 ArrayListセット
  • を構築する
  • 2.チェーンテーブルは
  • を実現する.
  • 2.1LinkedList
  • 2.1.1構築ノード
  • 2.1.2チェーンテーブルセット
  • を構築する.
    テーマ:任意のタイプ、任意の長さをサポートする容器(集合)を設計し、削除・変更を実現する方法.
    1.配列実装
    1.1 ArrayListコレクションの構築
    public class ArrayList {
        //  Object     
    	Object[] data ;
        //    ,             
    	int size;
    	public ArrayList() {
            //      10
    		this(10);
    	}
    	ArrayList(int length){
            //             
    		data = new Object[length];
    	}
        	//  
    	public int getLength(){
    		return size;
    	}
        //       ,    toString()  
        //           ,        
        @Override
    	public String toString() {
            //        ,   size
    		Object[] newdata = new Object[size];
            // data           
    		System.arraycopy(data, 0, newdata, 0, size);
            //  Arrays ,         
    		return Arrays.toString(newdata);
    	}
    	// 
    	void add(Object obj){
            //      
    		if(size>=data.length){
                //        ,      10
    			Object[] newdata = new Object[data.length+10];
                //                  
    			System.arraycopy(data, 0, newdata, 0, size);
    		}
            //              
    		data[size] = obj;
            //        1
    		size++;
    	}
    
    	//          ;
    	public Object getElementByIndex(int index){
    		if(index<0||index>size){
    			throw new ArrayIndexOutOfBoundsException("     ,     :0~"+(size-1));
    		}
    		return data[index];
    	}
    	//              
    	public int getFirstIndexByElement(Object obj){
    		for (int i = 0; i < size; i++) {
    			if(obj.equals(data[i])){
    				return i;
    			}
    		}
    		return -1;//    
    	}
        //          
    	public void deleteElementByIndex(int index){
    		if(index<0||index>size){
    			throw new ArrayIndexOutOfBoundsException("     ,     :0~"+(size-1));
    		}
    		System.arraycopy(data, index+1, data, index, size-index-1);
    		size--;
    	}
    	//          
    	public void deleteFirstElement(Object obj){
    		int index = getFirstIndexByElement(obj);
    		System.out.println(index);
    		deleteElementByIndex(index);
    	}	
    }
    

    2.チェーンテーブル実装
    2.1LinkedList
    2.1.1構築ノード
    public class Node {
    	//      
    	Object data;
    	//   next  
    	Node next;
    	//    ,             
    	public Node(Object data) {
    		this.data = data;
    	}
    }
    

    2.1.2チェーンテーブルセットの構築
    public class LinkedListDemo {
    	//     
    	Node first;
        //  toString  ,       
    	@Override
    	public String toString() {
    		StringBuilder sb = new StringBuilder("[");
    		//             
    		Node temp = first;
    		//      
    		while(temp!=null){
    			//       next     ,        ,       
    			if(temp.next!=null){
    				sb.append(temp.data).append(",");
    			}else{
    				//       next    ,        ,         
    				sb.append(temp.data).append("]");
    			}
    			//       
    			temp = temp.next;
    		}
    		return sb.toString();
    	}
    	// 
        void add(Object obj){
    		//           
    		Node node = new Node(obj);
    		//         
    		if(first==null){
    			//             
    			first = node;
    		}else{
    			//             
    			Node temp = first;
    			//     next     ,             ,         
    			while(temp.next!=null){
    				temp = temp.next;
    			}
    			//               
    			temp.next = node;
    		}
    	}
    }
    

    注意:チェーンテーブル実装では、要素を追加する操作のみが追加されます.