В коллекции нет дубликатов
Для коллекции, в которой не должно быть повторяющихся элементов, используйте Set<Item>
вместо ArrayList<Item>
. Структура данных Set
не будет хранить дубликаты . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Таким образом, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * * * * * * * * * * 10 *
Этот подход O (1) - что намного лучше, чем хранить ArrayList<Item>
и повторять его и искать дубликат (который будет O (n) в худший случай).
Появления
При возникновении проблемы, вместо хранения ваших предметов в ArrayList<Item>
, оставьте их в Map<Item,Integer>
. Это сопоставит элемент с количеством его экземпляров.
Используя карту, вам необходимо получить ключ, который является Item
, который вы собираетесь добавить. Если он уже существует на карте, просто добавьте его к значению этого ключа (номер вхождения).
Если их ключ еще не существует (это первый раз, когда Item
будет вставлен в карту), просто добавьте его на карту и установите значение 1.
Использование карты также будет более эффективным решением, так как оно будет также O (1) вместо O (n) , если ArrayList<Item>
будет б.
* +1039 * Пример:
Set<Item> itemSet = new HashSet<>();
Map<Item,Integer> occurencesMap = new HashMap<>();
itemSet.add(yourItem);
itemSet.add(yourItem);
itemSet.add(secondItem);
//itemSet now contains only 2 objects!
if (occurencesMap.get(yourItem) == null){
occurencesMap.put(yourItem,1);
}
else{
//adding 1 to the current value of occurences for that item.
occurencesMap.get(yourItem)++;
}