Как найти повторяющиеся записи в массиве строк и сделать их нулевыми, используя HashMap - PullRequest
3 голосов
/ 07 июня 2011

У меня есть массив строк, я хочу найти дубликаты строк в массиве и хочу обнулить дубликаты, используя HashMap с хорошей сложностью времени.

Ответы [ 4 ]

4 голосов
/ 07 июня 2011

Похоже, вы хотите использовать набор.Это удаляет все повторяющиеся записи, но вы также можете просто создать массив, который имеет уникальные записи (и не имеет нулевых значений)

String[] array =
Set<String> found = new LinkedHashSet<String>();
for(int i=0;i<array.length;i++)
   if(!found.add(array[i]))
       array[i] = null;

// just the entries without duplicates.
String[] unique = found.toArray(new String[found.size()]);
2 голосов
/ 07 июня 2011

Вам на самом деле не нужна карта.Вот пример, в котором вместо этого используется HashSet.(Предполагая, что вы хотите, чтобы повторяющиеся строки были обнулены.

String[] strs = "aa,bb,cc,aa,xx,cc,dd".split(",");

Set<String> seen = new HashSet<String>();

for (int i = 0; i < strs.length; i++)
    if (!seen.add(strs[i]))
        strs[i] = null;

// Prints [aa, bb, cc, null, xx, null, dd]
System.out.println(Arrays.toString(strs));
1 голос
/ 07 июня 2011

Вы можете сделать это за O(n) время, перебирая массив один раз, вставляя каждый новый элемент в HashSet и заменяя элементы массива, которые уже находятся в HashSet, на nulls.

0 голосов
/ 07 июня 2011

Вместо HashMap вы также можете использовать Set, следующие шаги (вы можете сами разобраться в деталях):

  • для каждой строки в массиве
  • , еслистрока существует на карте / установите в ноль
  • , в противном случае добавьте ее на карту / набор

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...