Эффективное пересечение двух Списков <Строка> в Java?

Вопрос прост:

У меня есть два Списка

List<String> columnsOld = DBUtils.GetColumns(db, TableName);
List<String> columnsNew = DBUtils.GetColumns(db, TableName);

И я должен получить пересечение их. Существует ли быстрый способ достигнуть этого?

60
задан Pentium10 8 March 2010 в 11:15
поделиться

2 ответа

Вы можете использовать retainAll method:

columnsOld.retainAll (columnsNew);
111
ответ дан 24 November 2019 в 17:34
поделиться

Поскольку keepAll не затрагивает коллекцию аргументов, это будет быстрее:

List<String> columnsOld = DBUtils.GetColumns(db, TableName); 
List<String> columnsNew = DBUtils.GetColumns(db, TableName); 

for(int i = columnsNew.size() - 1; i > -1; --i){
    String str = columnsNew.get(i);
    if(!columnsOld.remove(str))
        columnsNew.remove(str);
}

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

18
ответ дан 24 November 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: