Это обязательно должен быть многомерный массив? Вы можете использовать только карту ha sh с настраиваемым ключом, который содержит ваш строковый ключ и два целочисленных ключа. Вот полный пример того, что я имею в виду:
import java.util.HashMap;
import java.util.Objects;
public class multidim {
static class Key {
int index0, index1;
String str;
int _hash_code;
public Key(String s, int i0, int i1) {
_hash_code = Objects.hash(s, i0, i1);
str = s;
index0 = i0;
index1 = i1;
}
public int hashCode() {
return _hash_code;
}
public boolean equals(Object x) {
if (this == x) {
return true;
} else if (x == null) {
return false;
} else if (!(x instanceof Key)) {
return false;
}
Key k = (Key)x;
return (index0 == k.index0)
&& (index1 == k.index1)
&& Objects.equals(str, k.str);
}
}
public static void main(String[] args) {
HashMap<Key, Double> m = new HashMap<Key, Double>();
m.put(new Key("mjao", 3, 4), 119.0);
m.put(new Key("katt$k1t", 4, 6), 120.0);
System.out.println("Value that we put before: "
+ m.get(new Key("mjao", 3, 4)));
}
}
Мы определяем класс Key
, который представляет значения, которые вы используете для доступа к элементам, и переопределяем его методы equals
и hashCode
, чтобы он можно использовать на карте ha sh. Затем мы просто используем его с классом java.util.HashMap
. Запуск вышеуказанной программы выведет Value that we put before: 119.0
.
Edit : Добавить this == x
сравнение в equals
(небольшая оптимизация).