コードコピーは次のとおりです。
java.util.arraysをインポートします。
/**
*シーケンシャル線形テーブルの実装
*/
パブリッククラスのリネリスト<e> {
プライベートINTサイズ; //長さ
プライベートオブジェクト[]配列; //基礎となる配列
プライベートfinal int default_length = 16; //デフォルトの長さ
/**
*ノンパラメーター建設方法
*/
public linElist(){
サイズ= 0;
//デフォルトの長さを使用して配列を作成します
array = new Object [default_length];
}
/**
*建設の長さを指定します
* @paramの長さの初期長を指定します
*/
パブリックリネリスト(int length){
if(length <0){
新しいIllegalargumentException( "初期長は違法:"+長さ)を投げます。
}
//指定された長さの配列を作成します
array = new Object [length];
}
/**
*建設用の初期化要素と長さを指定します
* @param要素は要素を初期化します
* @paramの長さの初期化長
*/
パブリックリネリスト(E要素、int length){
if(length <1){
新しいIllegalargumentException( "初期長は違法:"+長さ)を投げます。
}
//指定された長さの配列を作成します
array = new Object [length];
//最初の要素を初期化します
配列[0] = element;
サイズ++;
}
/**
*建設用の初期化要素を指定します
* @param要素は要素を初期化します
*/
パブリックリネリスト(E要素){
//デフォルトの長さで配列を初期化します
array = new Object [default_length];
//最初の要素を初期化します
配列[0] = element;
}
/**
*要素の数を取得します
*/
public int size(){
返品サイズ。
}
/**
*空であるかどうかを判断します
*/
public boolean isempty(){
return size == 0;
}
/**
*この要素が含まれているかどうかを判断します
*/
public boolean contains(e e){
if(indexof(e)== -1){
falseを返します。
}
trueを返します。
}
/**
*配列としてフォーマット
*/
public Object [] toarray(){
return array.copyof(array、size);
}
/**
*線形テーブルの尾に要素を追加する
* @param e
* @戻る
*/
public void add(e e){
extendcapacity(size+1);
配列[size] = e;
サイズ++;
}
/**
*容量を拡張します
* @paramの長さ必要な長さ
*/
private void extendcapacity(int length){
//現在の配列の長さと必要な長さは最大でなければなりません
int mincapacity = math.max(array.length、length);
//容量拡張が必要かどうかを判断します
if(mincapacity -array.length> 0){
//配列の長さは半分増加します
int newlength = array.length + array.length/2;
//新しい長さが要件よりも小さい場合は、必要な長さを配列の長さとして使用します
if(newlength <mincapacity){
newLength = mincapacity;
}
//配列の長さはinteger.max_valueを超えることはできません
if(newlength> integer.max_value -8){
newlength = integer.max_value;
}
//配列拡張
array = array.copyof(array、newlength);
}
}
/**
*このすべての要素を線形テーブルから削除します
* @param e削除する必要がある要素
* @戻る
*/
public void removeall(e e){
if(e == null){
for(int i = 0; i <size; i ++){
if(array [i] == null){
fastremove(i);
}
}
}それ以外{
for(int i = 0; i <size; i ++){
if(e.equals(array [i])){
fastremove(i);
}
}
}
}
/**
*インデックスの要素を削除し、次の要素を順番に前方に移動します
* @paramインデックス削除する必要があるインデックス
*/
private void fastremove(int index){
if(size-index-1> 0){
// ARRAYSはインデックス+1から始まり、すべてが前進します
System.ArrayCopy(Array、Index+1、Array、Index、Size-1);
}
//最後の要素を空にしてください
配列[ - サイズ] = null;
}
/**
*線形テーブルをクリアします
*/
public void clear(){
//すべての配列をnullに入れます
arrays.fill(array、null);
//要素の数を0に変更します
サイズ= 0;
}
/**
*インデックスで要素を取得します
* @paramインデックス
*インデックスの@return要素
*/
@suppresswarnings( "unchecked")
public e get(int index){
checkindex(index);
return(e)array [index];
}
/**
*インデックスが範囲外かどうかを確認します
* @paramインデックス
*/
private void checkindex(int index){
if(index> = size || index <0){
新しいindexoutofboundsexception( "indexoutboundsexception");
}
}
/**
*インデックスの要素を新しい要素に変更する
* @paramインデックスの位置
* @param要素
*元のインデックスの@return要素
*/
@suppresswarnings( "unchecked")
public e set(int index、e element){
checkindex(index);
e e =(e)array [index];
配列[index] = element;
eを返す;
}
/**
*指定されたインデックスに指定された要素を挿入します
* @paramインデックスの位置
* @param要素
*/
public void add(int index、e element){
//インデックスを確認します
checkindex(index);
//容量を拡大する必要がありますか?
extendcapacity(size+1);
//配列をコピーします
System.ArrayCopy(Array、Index、Array、Index+1、Size-Index);
配列[index] = element;
}
/**
*インデックスの要素を削除します
* @paramインデックスインデックス
* @return削除された要素
*/
@suppresswarnings( "unchecked")
public e remove(int index){
checkindex(index);
//インデックス位置要素を取得します
e e =(e)array [index];
fastRemove(index);
eを返す;
}
/**
*要素が最初に表示される場所のインデックスを取得します
* @param e要素を探す要素
* @returnが-1の場合、線形テーブルにこの要素がないことを意味します
*/
public int indexof(e e){
if(e == null){
for(int i = 0; i <size; i ++){
if(e == array [i]){
私を返します。
}
}
}
for(int i = 0; i <size; i ++){
if(e.equals(array [i])){
私を返します。
}
}
return -1;
}
/**
*要素の最後の発生のインデックスを取得します
* @param e要素を探す要素
* @returnが-1の場合、線形テーブルにこの要素がないことを意味します
*/
public int lastindexof(e e){
//要素がnullかどうかを判断します
if(e == null){
for(int i = size-1; i> = 0; i-){
if(e == array [i]){
私を返します。
}
}
}
for(int i = size-1; i> = 0; i-){
// nullの場合、ここでnullpointの例外が実行されます
//したがって、それがnullであるかどうかを確認する必要があります
if(e.equals(array [i])){
私を返します。
}
}
return -1;
}
/**
*線形テーブルを傍受します
* @param fromindexからインデックスを開始します
* @param toindex end index
* @returnインターセプトされた線形テーブル
*/
@suppresswarnings( "unchecked")
public linElist <e> sublist(int fromindex、int toindex){
//開始インデックスが範囲外であるかどうかを判断します
if(fromindex <0 || fromindex> = size){
新しいindexOutofboundsexception( "インデックスクロスボーダーを開始:"+fromindex)をスローします。
}
//終了インデックスが範囲外であるかどうかを判断します
if(toindex> = size || fromindex <0){
新しいindexOutofboundsexception( "end index outbound:"+toindex)をスローします。
}
//開始インデックスとエンドインデックスが正しいかどうかを判断します
if(fromindex> toindex){
新しいIllegalargumentExceptionをスローします(「パラメーターが正しくありません。開始インデックスはEnd Indexよりも大きくする必要があります」);
}
Linelist <e> list = new Linelist <e>();
for(int i = fromindex、j = toindex; i <= j; i ++){
list.add((e)array [i]);
}
返品リスト。
}
}