В основном я получаю 2 большие списки данных из 2 различных баз данных, список выглядит следующим образом:перебор и сравнение больших наборов данных
List 1:
=============
A000001
A000002
A000003
.
.
A999999
List 2:
=============
121111
000111
000003
000001
.
.
Мне нужно сравнить два список и выяснить, каждый из данных, которые в List 1
доступен в List 2
(после добавления к нему стандартного ключа), так что, если он доступен, поместите его в 3-й список для дальнейших манипуляций. Например, A000001
доступен в List 1
, а также в List 2
(после добавления к нему стандартного ключа), поэтому мне нужно поместить его в 3-й список.
В принципе, у меня этот код, он подходит для каждой строки в List 1
, я повторяю все данные в List 2
и делаю сравнение. (Оба являются списками массивов)
List<String> list1 = //Data of list 1 from db
List<String> list2 = //Data of list 2 from db
for(String list1Item:list1) {
for(String list2Item:list2) {
String list2ItemAfterAppend = "A" + list2Item;
if(list1Item.equalsIgnoreCase(list2ItemAfterAppend)) {
//Add it to 3rd list
}
}
}
Да, эта логика работает нормально, но я считаю, что это не эффективный способ перебора списка. После размещения таймеров он занимает 13444 миллисекунды в среднем для 2000x5000 списка данных. Мой вопрос в том, есть ли какая-нибудь другая логика, о которой люди могут подумать, или предложить мне улучшить производительность этого кода?
Надеюсь, я поняла, если не сообщите, если я могу улучшить вопрос.
Кроме того, пожалуйста, сообщите я знаю, что здесь нет темы для этого сайта, я могу с радостью перейти на другой сайт stackexchange по мере необходимости. –
сортировать 'list2', а затем использовать двоичный поиск, чтобы найти совпадение. (Прочитайте API 'java.util.Arrays', оба находятся там) – Tibrogargan
У вас есть проблема с чувствительностью к регистру, например, список может иметь AGJ, а два могут иметь agj –