Дубликат int [] добавлен в хэш-сет?

1

Я только что узнал 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 не допускает дубликатов.

  • 1
    Массивы в Java не имеют hashCode полезного для равенства, или equals .
  • 0
    stackoverflow.com/questions/16657905/...
Теги:
duplicates
hashset
int
add

2 ответа

2
Лучший ответ

HashSet не допускает дублирования на основе методов hashCode и equals, но массивы не переопределяют такие методы, поэтому даже если у вас есть два массива с одним и тем же содержимым, они не являются одинаковыми массивами, поэтому они будут разрешены в Set.

Вместо этого используйте List<Integer>. Обратите внимание на использование Integer над int потому что generics не поддерживают примитивные типы.

  • 0
    Другой, более эффективный вариант - заключить каждый массив int в IntBuffer .
  • 0
    Хорошо спасибо большое
0

Два массива, даже если они содержат одни и те же элементы, могут быть не равными, поскольку равенство определяется как ссылочное равенство для не-примитивов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню