Не уверен, почему вам нужен двойник на вашей карте. С точки зрения того, что вы пытаетесь сделать, у вас есть int [], и вы просто хотите подсчитать, сколько раз встречается каждая последовательность? В любом случае, зачем для этого нужен дубль?
Что я хотел бы сделать, это создать оболочку для массива int с соответствующими методами .equals и .hashCode, чтобы учесть тот факт, что сам объект int [] не учитывает данные в своей версии этих методов.
public class IntArrayWrapper {
private int values[];
public IntArrayWrapper(int[] values) {
super();
this.values = values;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(values);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
IntArrayWrapper other = (IntArrayWrapper) obj;
if (!Arrays.equals(values, other.values))
return false;
return true;
}
}
А затем используйте мультисет Google Guava, который предназначен именно для подсчета вхождений, при условии, что тип элемента, который вы в него вставили, имеет надлежащие методы .equals и .hashCode.
List<int[]> list = ...;
HashMultiset<IntArrayWrapper> multiset = HashMultiset.create();
for (int values[] : list) {
multiset.add(new IntArrayWrapper(values));
}
Затем, чтобы получить счет для любой конкретной комбинации:
int cnt = multiset.count(new IntArrayWrapper(new int[] { 0, 1, 2, 3 }));