2016-04-24 6 views
0

У меня есть 2 источника, из которых я прочитал данные. Эти данные могут быть дублированы, и мне нужно обнаружить эти дубликаты, вычитая 2 коллекции друг от друга. В настоящее время я использую List<Map<String, String> duplList, поэтому, когда я вставить повторяющиеся значения:Эффективная структура данных для хранения/добавления/удаления повторяющихся элементов

Map<String, String> map1 = new HashMap(); 
map1.put("1", "1"); 
map1.put("1", "1"); 
map1.put("1", "1"); 
duplList.add(map1); 

Map<String, String> map2 = new HashMap(); 
map2.put("1", "1"); 
map2.put("1", "1"); 
duplList.add(map2); 

А потом вычитать их:

Collection diff1 = CollectionUtils.subtract(map1, map2); 
Collection diff2 = CollectionUtils.subtract(map2, map1); 

Я получаю объект, который содержит разницу между map1 и map2.
Хотя это работает, для меня это кажется не очень эффективным (поскольку он работает в O (n) времени).

Мне было интересно, есть ли более эффективный способ добавления и вычитания данных в более эффективную структуру данных.

+0

Как вы определяете дубликаты? Дублировать ключи или пары ключ-значение? Также, как вы разрешаете конфликты после того, как дубликаты были найдены? –

+0

Если я понимаю вас правильно, вы можете добавить свои «дублирующие» объекты в Set, используя метод add. Если вызов add с объектом возвращает false, то объект дублируется, поэтому сохраните его для отдельной коллекции. – Ilya

+0

@SergeiLebedev Дубликаты определяются как один и тот же ключ-значение paris, поэтому «1» -> «1» является дубликатом, но «1» -> «2» - нет. – ocp1000

ответ

0

Если вы хотите, чтобы ваши данные были в несортированной коллекции, вы можете использовать HashSet, если вы хотите, чтобы отсортировать его, вы можете использовать TreeSet. TreeSet требует класс, который реализует Comparable, хотя - если вы просто работаете со строками или целыми числами, все должно быть хорошо. Вы можете найти более подробную информацию на Java Doc: Set

+0

Я не упомянул, что мои данные должны быть в формате пары ключ-значение. Будет ли более эффективным хранить его в Set >, чем List >? – ocp1000

Смежные вопросы