解答例 - j2.lesson07.SyzygyList

package j2.lesson07;

import java.util.AbstractList;
import java.util.List;

/**
 * 課題2004 - 解答例.
 * 二つのリストを連接したリスト.
 @author arakawa
 @version $Id: SyzygyList_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
 */
public class SyzygyList extends AbstractList {
    
    private final List head;
    private final List tail;
    
    /**
     * 連接リストのインスタンスを作成する。
     @param head 前半のリスト
     @param tail 後半のリスト
     */
    public SyzygyList(List head, List tail) {
        super();
        this.head = head;
        this.tail = tail;
    }

    /**
     * この連接リストの指定した位置にある要素を返す。
     @param index 要素を取得する位置
     @return 取得した要素
     */
    public Object get(int index) {
        int headSize = this.head.size();
        if (index < headSize) {
            return this.head.get(index);
        }
        else {
            return this.tail.get(index - headSize);
        }
    }
    
    /**
     * この連接リストの指定した位置にある要素を、指定した値に置き換える。
     @param index 要素を置き換える位置
     @param element 指定された位置に格納される要素
     @return 指定された位置に以前あった要素
     */
    public Object set(int index, Object element) {
        int headSize = this.head.size();
        if (index < headSize) {
            return this.head.set(index, element);
        }
        else {
            return this.tail.set(index - headSize, element);
        }
    }

    /**
     * この連接リストの合計サイズを取得する。
     @return 合計サイズ
     */
    public int size() {
        return this.head.size() this.tail.size();
    }
}