Добавляя к верхнему проголосовавшему ответу и многим выше, подчеркивая «более общий, лучший», я хотел бы копать немного больше.
Map
является структурным контрактом, а HashMap
представляет собой реализацию, предоставляющую свои собственные методы для решения различных реальных проблем: как рассчитать индекс, какова емкость и как его увеличить, как вставить, как сохранить индекс уникальным и т. д.
Давайте посмотрите в исходный код:
В Map
у нас есть метод containsKey(Object key)
:
boolean containsKey(Object key);
JavaDoc:
boolean java .util.Map.containsValue (значение объекта)
Возвращает true, если эта карта отображает одну или несколько клавиш в указанное значение. Более формально возвращает true тогда и только тогда, когда эта карта содержит хотя бы одно сопоставление со значением
v
, таким как(value==null ? v==null : value.equals(v))
.Параметры: значение
значение, наличие которого на этой карте должно быть указано
Возвращает: true
, если это отображение отображает одну или несколько клавиш в указанное значение
Throws:
ClassCastException - если значение имеет неправильный тип для эта карта (необязательно)
NullPointerException - если указанное значение равно null, и эта карта не допускает нулевые значения (необязательно)
blockquote>Для ее реализации требуются ее реализации, [7]
HashMap
:public boolean containsKey(Object key) { return getNode(hash(key), key) != null; }
Оказывается,
HashMap
использует hashcode для того, чтобы проверьте, содержит ли эта карта ключ. Таким образом, он имеет преимущество алгоритма хеширования.
Попробуйте использовать ARRAY_JOIN
с ARRAY_AGG
:
SELECT
id1,
id2,
ARRAY_JOIN(ARRAY_AGG(actions), ',') actions
FROM yourTable
GROUP BY
id1,
id2;