Сразу хочу сказать, коллекции нельзя использовать (ArrayList , HashMap, HashSet etc.)
Нужно сравнивать хешируя.
В массиве сотни миллионов строк)
Подскажите по эффективности, пожалуйста
irklogin: фактически, вы можете взять ещё один офигенно большой массив String'ов, в который будете ложить элементы из первого массива по методу открытой адресации. Во вся случае, это поможет отсеять дубли. Остальное зависит от того, надо ли сохранять порядок ключей. Скорость будет O(1), память O(n).
1. Для данного решение нужна коллекция java.util.HashSet. Методы equals и hashCode в классе String реализованы эффективно, так что HashSet без проблем отсечет все дубли.
2. Зачем вы вообще строки грузили в массив? Сразу нужно было использовать HashSet.
3. С чего вы взяли что это будит менее эффективней, чем заливать все в массив?
4. Скорость доступа к элементам set-а такая же как и у массива: O(1).
5. Если вы грузите миллионы строк в массив, то явно экономия памяти у вас не в приоритете.
В вопросе сказано про 'дубликаты', т.е. в массиве могут находиться одинаковые строки, поэтому хранение строк в ХешСете уже не подходит, нужно уточнение.
Евгений Корначев: Вопрос - удалить дубликаты. HashSet не может содержат дубликаты. Если вы пытаетесь добавить строку, которая уже есть в сете, то она будит проигнорирована, в итоге вы получите коллекцию с набором уникальных строк