固定サイズのコレクションを制御できるカスタムクラス内に汎用コレクションをラップするだけです。たとえば、次のように
class Queue<T> {
private ArrayList<T> q;
private int size;
public Queue(int size) {
this.size = size;
this.q = new ArrayList<T>(size);
}
public int size() {
return size;
}
// ...
public T get(int index) {
if (index > q.size()) {
return null;
}
// ... or whatever
return q.get(index);
}
}
** EDIT **
以上具体的には、あなた自身のコレクションと互換性のある一般的なクラスを作成します。たとえば、次のようにこのテストされていないクラスはadd
get
とset
とremove
操作を許可しませんが、
public class FixedQueue<E> extends AbstractList<E> {
private Object[] queue;
public FixedQueue(int size) {
queue = new Object[size];
}
@Override
public E set(int index, E element) {
Object old = queue[index];
queue[index] = element;
modCount++;
return (E) old;
}
@Override
public E get(int index) {
return (E) queue[index];
}
@Override
public int size() {
return queue.length;
}
@Override
public E remove(int index) {
Object old = queue[index];
System.arraycopy(queue, index+1, queue, index, queue.length - index - 1);
modCount++;
return (E) old;
}
}
、などしかし、あなたがしたい場合は、あなたがあなた自身の仕様のためにそれを実装することができます。固定サイズの配列を使用する代わりにクラスを実装すると、他のソースに触れることなく実装するための機能(たとえばensureCapacity
)を追加する必要がある場合に使用できます。私はちょうどあなたの編集を見た
** UPDATE **、基本的に、あなたは右のオフ始めています。要素を取得するときにジェネリック型にキャストする配列Object
を使用してください。たとえば、JavaのArrayList
実装を参照してください。
あなたは正確に何をしようとしていますか? – Falmarri
@Falmarri - 私は循環的なキューを実装しようとしており、基本的なデータストアとして構造体をバッファするのに使いたいと考えています。私は、固定サイズのバッファを割り当て、インデックスで要素にアクセスできるようにする必要があります。 – ripper234
しかし、コンパイル時にわからない任意のオブジェクトを保持できるバッファが必要なのはなぜですか? – Falmarri