int[]
не будет работать, потому что (см. равно Arrays.equals в Java ):
public static void main(String[] args) throws Exception {
int[] one = new int[] { 1, 2, 3 };
int[] two = new int[] { 1, 2, 3 };
System.out.println(one.equals(two)); // <<--- yields false
}
Но, если:
Map<List<Integer>, Object> store = new HashMap<>();
Тогда вы можете:
store.put(Arrays.asList(12, 43), myObject);
myObject == store.get(Arrays.asList(12, 43));
Или, может быть, немного больше ОО - создать тип StoreKey
, который просто инкапсулирует List
:
public final class StoreKey {
private List<Integer> keyParts;
public static StoreKey of(int... is) {
return new StoreKey(IntStream.of(is)
.boxed()
.collect(Collectors.toList()));
}
public StoreKey(List<Integer> keyParts) {
this.keyParts = keyParts;
}
@Override
public int hashCode() {
return keyParts.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof StoreKey)) {
return false;
}
return this.keyParts.equals(((StoreKey) obj).keyParts);
}
}
И затем:
Map<StoreKey, Object> store = new HashMap<>();
store.put(StoreKey.of(12, 43), myObject);
Наконец, мы видим, что это будет работать как ключ, потому что:
public static void main(String[] args) throws Exception {
StoreKey one = StoreKey.of(1, 2, 3);
StoreKey two = StoreKey.of(1, 2, 3);
System.out.println(one.equals(two)); // <<--- yields true
}