JAVAにおけるシングルチェーンテーブルLinkedListクラスでの共通機能を手動で実現

4973 ワード

まず、単一チェーンテーブルクラスのデータを初期化し、メンバー変数、構築方法、内部クラスなどを定義し、共通のメソッドを追加します. 
public class SinglyLinkedListDemo {
	/**        first */
	private Node first;
	/**            */
	private int size;
	/**    */
	public SinglyLinkedListDemo() {
	}
	/**    ,       */
	public SinglyLinkedListDemo(Object value) {
		super();
		Node node = new Node(value);
		first = node;
	}
	/**         */
	private class Node{
		/**        ,value   ,next           */
		Object value;
		Node next;
		/**    */
		public Node(){
		}
		/**    ,   value */
		public Node(Object value) {
			super();
			this.value = value;
		}
	}
}

1、任意の種類のデータvoid add(Object obj)を任意に追加できる
/**
 * 1.               void add(Object obj)
 * @param obj
 */
public void add(Object obj){
	//       
	Node node = new Node(obj);
	//           ,    ,            first     
	if(first == null){
		first = node;
	}else{
		//      temp        
		Node temp = first;
		//           ,     、        
		while(temp.next != null){
			temp = temp.next;
		}
		//                   
		temp.next = node;
	}
	//         1
	size++;
}

2.戻り要素の個数int size()
/**
 * 2.           int size()
 * @return
 */
public int size(){
	return size;
}

3、toStringの書き換え方法
/**
 * 3.               toString(),    :[ 1, 2.。。。。]
 * 	      ,    value   ,     
 */
@Override
public String toString() {
	//           、      、   StringBuilder
	StringBuilder sb = new StringBuilder("[ ");
	//        ,   [ ]
	if(first == null){
		sb.append("]");
	}else{
		//      temp        
		Node temp = first;
		//          
		while(temp.next != null){
			sb.append(temp.value + " , ");
			temp = temp.next;
		}
		sb.append(temp.value + "]");
	}
	// StringBuilder   String    
	return sb.toString();
}
/**
 *        、                 
 * @param index
 */
private void checkIndex(int index){
	if(index<0 || index>=size){
		throw new IllegalArgumentException(" ,     :[0,"+(size-1)+"]");
	}
}
/**
 * 4.            Object searchByIndex(int index)
 * @param index
 * @return
 */
public Object searchByIndex(int index){
	//       
	checkIndex(index);
	//    count      
	int count = 0;
	//  ,    temp         
	Node temp = first;
	//                 
	Object obj = null;
	//    
	while(count != index){
		temp = temp.next;
		count++;
	}
	obj = temp.value;
	//      
	return obj;
}
/**
 * 5.                  int searchByElement(Object ele);
 * @param ele
 * @return
 */
public int searchByElement(Object ele){
	Node temp = first;
	int count = 0;
	if(ele == null){
		while(temp.value != ele){//   :      
			if(temp.next == null){
				return -1;
			}
			count++;
			temp = temp.next;
		}
		return count;
	}else{
		while(temp != null){//   :        
			if(ele.equals(temp.value)){
				return count;
			}
			count++;
			temp = temp.next;
		}
	}
	return -1;
}

 プライベートメソッドをカスタマイズし、下付き文字に基づいてこの下付き文字に対応するオブジェクトを返します.目的:このメソッドを繰り返し呼び出して、後のいくつかのメソッドをより簡単に完了できます.PS:下記の方法で上記の方法を呼び出します
/**
 *               Node searchNodeByIndex(int index)
 * @param index
 * @return
 */
private Node searchNodeByIndex(int index){
	checkIndex(index);
	Node temp = first;
	int count = 0;
	while(count
/**
 * 6.             void updateByIndex(int index,Object obj)
 * @param index
 * @param obj
 */
public void updateByIndex(int index,Object obj){
	checkIndex(index);
	Node searchNodeByIndex = searchNodeByIndex(index);
	searchNodeByIndex.value = obj;
}
/**
 * 7.           ,         Object deleteByIndex(int index)
 * @param index
 * @return
 */
public Object deleteByIndex(int index){
	checkIndex(index);
	Object obj = null;
	if(index == 0){
		obj = first.value;
		first = first.next;
		size--;
		return obj;
	}else{
		Node node1 = searchNodeByIndex(index);
		obj = node1.value;
		Node node2 = searchNodeByIndex(index-1);
		node2.next =node1.next;
		size--;
		return obj;
	}
}
/**
 * 8.                  void deleteByElement(Object ele)
 * @param ele
 */
public void deleteByElement(Object ele){
	int index = searchByElement(ele);
	if(index<0){
		return;
	}
	deleteByIndex(index);
}
/**
 * 9.               void insertByIndex(int index,Object obj)
 * @param index
 * @param obj
 */
public void insertByIndex(int index,Object obj){
	checkIndex(index);
	Node newNode = new Node(obj);
	//Node temp = first;
	if(index == 0){
		newNode.next = first;
		first = newNode;
		size++;
	}else{
		Node node = searchNodeByIndex(index);
		Node node2 = searchNodeByIndex(index-1);
		newNode.next = node;
		node2.next = newNode;
		size++;
	}
}
/**
 * 10.           void clear();
 */
public void clear(){
	first = null;
	size = 0;
}

PS:以上の10の方法は単鎖表でよく使われる方法で、注釈が書きにくいので、後の方法は、注釈がなく、許してください0.0