これは何か? を編集:Jiddo氏によれば、この構造では要素を効率的に削除できません。 ArrayList + Setは、効率的な削除が必要ない場合は簡単です。したがって、この構造は実際にはあまり効果がありません。
import java.util.*;
public class ArraySet<T> {
private final Map<Integer, T> indexToElem;
private final Map<T, Integer> elemToIndex;
public ArraySet() {
indexToElem = new HashMap<Integer, T>();
elemToIndex = new HashMap<T, Integer>();
}
public T get(int index) {
if (index < 0 || index >= size())
throw new IndexOutOfBoundsException();
return indexToElem.get(index);
}
public void add(T elem) {
if (!contains(elem)) {
int index = indexToElem.size();
indexToElem.put(index, elem);
elemToIndex.put(elem, index);
}
}
// Doesn't work; see comment.
/*public void remove(T elem) {
int index = elemToIndex.get(elem);
indexToElem.remove(index);
elemToIndex.remove(elem);
}*/
public boolean contains(T elem) {
return elemToIndex.containsKey(elem);
}
public int size() {
return indexToElem.size();
}
}
* *は*オーダー*がありません。あなたはこれを意識しているかもしれないし、意識していないかもしれないが、強調する価値はあると思う。 –
索引を項目にマップするディクショナリと項目のハッシュマップの2つのデータ構造はどうですか。 – harold
このデータ構造はC#またはJavaで必要ですか? –