Привет У меня есть список массивов Список l1 и List l2, Имя, возраст, пол, uniqID, метки - это данные внутри списков. Я хочу присоединиться к l1 и l2 без duplicates.uniqID уникален для каждого ученика. Я перебираю все элементы и сравниваю каждый элемент. Но у моего списка было бы порядка 20 тыс. Элементов, поэтому цикл занимает слишком много времени. Я пробовал all the answers from this post ничего не работало для меня. Какие-либо предложения.?Объединение ArrayList элементов модели без дубликатов
ответ
Простой пример:
public class Person{
int id;
String name;
//fields, getter, setter, constructor omited....
@Override
public boolean equals(Object o){
if (!(o instanceof Person)){
//implicit null check
return false;
}
return this.id==((Person)o).id;
}
@Override
public int hashCode(){
return this.id;
}
}
Класс Person
делает реализацию равных и хэш-код в настоящее время. equals
используется java для определения того, является ли объект дубликатом другого объекта. hashCode
не является само по себе, но предлагается переопределить hashCode
и equals
вместе.
Если оба метода реализованы, вы можете просто использовать встроенные методы и datastructures в Java:
Со списками:
List<Person> listA = new ArrayList<>();
List<Person> listB = new ArrayList<>();
// filling the lists omitted
List<Person> mergedList=new ArrayList<>();
mergedList.addAll(listA);
mergedList.removeAll(listB);
mergedList.addAll(listB);
Или с наборами:
List<Person> listA = new ArrayList<>();
List<Person> listB = new ArrayList<>();
// filling the lists omitted
Set<Person> mergedSet=new HashSet<>();
mergedSet.addAll(listA);
mergedSet.addAll(listB);
Я попробую это сразу. – Sreyas
Это занимает около 1 минуты, хотя список устраняет все дубликаты. – Sreyas
Какой пример вы использовали? Решение, использующее 'Set', должно выполняться намного лучше, чем решение, используя' List'. Если вам все еще нужен порядок списка после слияния, вы можете использовать 'LinkedHashSet'. – samjaf
You может объединить и арраист и передать его объекту HashSet Поскольку Set не содержит дубликатов, вы можете сделать следующее
ArrayList<String> a=new ArrayList<String>();
ArrayList<String> b=new ArrayList<String>();
b.addAll(a);
Если вы хотите сохранить порядок элементов использовать LinkedHashSet
LinkedHashSet<String> result=new LinkedHashSet<String>(b);
объединение обоих списков и их добавление в 'Set' больше работы, чем необходимо. Вы можете просто вызвать 'addAll' оба списка в (пустой) Set. Кроме того, проблема заключается в отсутствии 'equals' и' hashCode' в пользовательском классе, который предотвратит правильную работу 'Set'. – samjaf
- 1. Объединение ArrayList без дубликатов
- 2. Объединение таблиц без дубликатов
- 3. Изменение дубликатов элементов внутри ArrayList
- 4. Объединение два таблицы без дубликатов
- 5. объединение 2 столов без дубликатов
- 6. Указатель элементов дубликатов в Java Arraylist
- 7. Отображение элементов без создания дубликатов
- 8. Объединение нескольких строк MySQL без дубликатов
- 9. PHP Объединение двух массивов без дубликатов
- 10. Объединение четырех таблиц, но без дубликатов
- 11. Запрос на объединение нескольких столбцов без дубликатов
- 12. Объединение Arraylist объектов и удаление дубликатов на основе значения поля
- 13. удаление и объединение дубликатов
- 14. Случайное генерирование элементов без дубликатов Java
- 15. Добавление дубликатов в ArrayList
- 16. Удаление дубликатов от arraylist
- 17. Проверить ArrayList дубликатов
- 18. Удаление дубликатов в ArrayList
- 19. Предотвращение дубликатов в arraylist
- 20. Проверка ArrayList для дубликатов
- 21. Удаление дубликатов в arraylist
- 22. MySQL: Объединение табличных дубликатов SUM()
- 23. Случайный выбор элемента массива без дубликатов без удаления элементов (JavaScript)
- 24. Объединение двух ArrayList
- 25. Объединение 2 таблицы игнорирующих дубликатов
- 26. Объединение дубликатов в один результат
- 27. печати элементов ArrayList без каких-либо повторов
- 28. Добавление элементов в массив без arrayList
- 29. Объединение нескольких таблиц «один-ко-многим» без дубликатов строк
- 30. Объединение таблиц с разным количеством строк без дубликатов
ли вы переопределить 'equals' в классе«Человек»? Удаление дубликатов, как предлагается в этом сообщении http://stackoverflow.com/a/14361428/966852, должно работать один раз, когда выполняется «equals». – samjaf
@Shanu: вы можете использовать 'HashSet' или любую коллекцию, которая реализует интерфейс' set' .. !! – AndiGeeky