Как посчитать уникальные элементы в массиве? Нужна только идея

Например: String[] str = {"M1","M1","M1","M2","M3"};
Наиболее рекомендуемый ответ - HashSet. Какие методы или у вас есть лучшая идея?


person Eldar Nezametdinov    schedule 05.08.2013    source источник
comment
Какая часть использования набора вам не нравится?   -  person reto    schedule 05.08.2013
comment
При отсутствии каких-либо внешних ограничений (например, сохранить первоначальный порядок уникальных элементов, не использовать встроенные функции или не потреблять дополнительную память), я также рекомендую использовать HashSet.   -  person CPerkins    schedule 05.08.2013


Ответы (4)


Если вы не хотите реализовать это самостоятельно, вам подойдет Set. Набор позволит добавлять только уникальные элементы и автоматически отфильтрует дубликаты.

Функциональность HashSet работает следующим образом:

Хэш вычисляется для объекта. Затем набор проверяет, является ли какой-либо из объектов с одинаковым хеш-значением .equals() новым значением. Если это так, новое значение игнорируется. Если нет, то он добавляется в набор.

Если вы добавите все в набор, а затем спросите его размер, вы получите количество уникальных элементов.

person bas    schedule 05.08.2013

Я предпочитаю использовать то, что уже предусмотрено изначально. В вашем требовании указано Set.

Вы можете сделать следующее -

Set<String> set = new HashSet<String>(Arrays.asList(str));
set.size();
person JHS    schedule 05.08.2013

Вы тоже можете попробовать это

    String[] str = {"M1","M1","M1","M2","M3"};
    HashMap<String,String> map=new HashMap<>();
    for(String i:str){
        map.put(i, i);
    }
    System.out.println(map.keySet().size());
person Ruchira Gayan Ranaweera    schedule 05.08.2013

Вместо создания временного списка, как в других ответах, вы также можете использовать:

Set<String> set = new HashSet<> ();
Collections.addAll(set, str);
int countUnique = set.size();
person assylias    schedule 05.08.2013