オブジェクトを格納するための配列型が必要です。しかし、私はこのような2種類のアクセスプロパティが必要です。
array [0] >>> object1
array ["a"] >>> object1
これは、インデックス0(整数)とインデックスa(文字列)が配列内の同じオブジェクトを逆参照することを意味します。オブジェクトを保存するには、コレクションが必要だと思いますが、上記のプロパティにアクセスするにはどうすればよいですか?
オブジェクトを格納するための配列型が必要です。しかし、私はこのような2種類のアクセスプロパティが必要です。
array [0] >>> object1
array ["a"] >>> object1
これは、インデックス0(整数)とインデックスa(文字列)が配列内の同じオブジェクトを逆参照することを意味します。オブジェクトを保存するには、コレクションが必要だと思いますが、上記のプロパティにアクセスするにはどうすればよいですか?
文字列キーから数値キーへのマップを作成します。
Map<String, Integer> keyMap = new HashMap<String, Integer>();
keyMap.put("a", o);
// etc
次に、MyObject が値の型であるオブジェクトのリストを作成します。
List<MyObject> theList = new ArrayList<MyObject>();
整数によるアクセス:
MyObject obj = theList.get(0);
文字列によるアクセス
MyObject obj = theList.get(keyMap.get("a"));
これにはキー データ構造を維持する必要がありますが、1 つのデータ構造から値にアクセスできます。
必要に応じて、クラスにカプセル化できます。
public class IntAndStringMap<V> {
private Map<String, Integer> keyMap;
private List<V> theList;
public IntAndStringMap() {
keyMap = new HashMap<String, Integer>();
theList = new ArrayList<V>();
}
public void put(int intKey, String stringKey, V value) {
keyMap.put(stringKey, intKey);
theList.ensureCapacity(intKey + 1); // ensure no IndexOutOfBoundsException
theList.set(intKey, value);
}
public V get(int intKey) {
return theList.get(intKey);
}
public V get(String stringKey) {
return theList.get(keyMap.get(stringKey));
}
}
配列はインデックスのみをサポートします。
インデックスとキーでオブジェクトを検索できるように見えます。その場合、2 つのコレクションを持つことをお勧めします。ルックアップの種類ごとに 1 つ。
List<MyObject> list = new ArrayList<MyObject>();
Map<String, MyObject> map = new HashMapList<MyObject>():
// array[0] >>> object1
MyObject object0 = list.get(0);
// array["a"] >>> object1
MyObject objectA = map.get("a");