Я только что узнал JAVA, и у меня есть проблема с этим кодом:
HashSet myHashSet = new HashSet();
int[] tab1 = new int[] {0,0};
int[] tab2 = new int[] {0,0};
myHashSet.add(tab1);
myHashSet.add(tab2);
Теперь мой HashSet
содержит {{0;0};{0;0}}
! Как я могу просто просто не иметь дубликатов в этом случае? Я думал, что HashSet
не допускает дубликатов.
HashSet
не допускает дублирования на основе методов hashCode
и equals
, но массивы не переопределяют такие методы, поэтому даже если у вас есть два массива с одним и тем же содержимым, они не являются одинаковыми массивами, поэтому они будут разрешены в Set
.
Вместо этого используйте List<Integer>
. Обратите внимание на использование Integer
над int
потому что generics не поддерживают примитивные типы.
Два массива, даже если они содержат одни и те же элементы, могут быть не равными, поскольку равенство определяется как ссылочное равенство для не-примитивов.
hashCode
полезного для равенства, илиequals
.