サンプルとして、SortedSetインターフェースを実装する単純なMySortedSetをJavaで開発しています。これは、E[]配列である単純な配列でバックアップされます。
それに関していくつか質問があります:
これはクラスです:(私は関連する部分ではなく、コード全体を書いているわけではありません)
public class MySortedSet<E> implements SortedSet<E>, Iterator<E> {
private E[] array;
private Comparator<? super E> _comparator;
private int size = 0;
private int capacity;
@SuppressWarnings("unchecked")
public MySortedSet() {
this.capacity = 10;
this.array = (E[]) new Object[this.capacity];
// this.array = Array.newInstance(Class<E> var,int size);
// We have to get Class<E> from outside caller.
}
}
プリミティブ型から参照型など、あらゆる種類の型を受け入れるため、アイテムを削除するときはよくわかりません。削除されたアイテムの代わりにnullを割り当てることをお勧めします。Javaはプリミティブ型を0で初期化するため、nullは参照型に対してのみ機能します。
以下はおそらく非常に悪いデザインです:
@Override
public boolean remove(Object o) {
int indexOfElement = this.find(o);
boolean removed = false;
if (indexOfElement != -1) {
this.array[indexOfElement] = null;
removed = true;
}
return removed;
}
誰かが配列から要素を削除するための最良の方法を教えてもらえますか?
編集:
正直なところ、単純な配列から要素を削除しようと考えているのは、削除されたアイテムを含まない配列全体をまったく新しい配列にコピーするようなものですが、パフォーマンスなどの点でどれほど効率的かはわかりません。