2013-08-05 1 views
0

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

+1

Какая часть использования набора вам не нравится? – reto

+5

Отсутствие каких-либо внешних ограничений (например, «сохранить исходный порядок уникальных элементов», «не использовать встроенные функции» или «не использовать дополнительную память»), HashSet тоже будет моей рекомендацией. – CPerkins

ответ

6

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

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

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

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

+0

+1 для объяснения. – Xynariz

2
new HashSet(Arrays.asList(str)).size(); 
1

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

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

Set<String> set = new HashSet<String>(Arrays.asList(str)); 
set.size(); 
1

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

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()); 
1

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

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