У меня есть коллекция строк, которые я хочу отфильтровать.Они будут выглядеть следующим образом:
xxx_xxx_xxx_xxx
, поэтому всегда последовательность букв или цифр, разделенных тремя подчеркиваниями.Максимальная длина каждой строки будет 60 символов.У меня может быть несколько миллионов таких в моей коллекции.
Какую структуру данных я могу использовать, чтобы эффективно сделать что-то вроде этого:
Получить все строки, начинающиеся с: "abc_123_456"
Получить все строки начинается с: "def_999_888"
и т. Д.
Например, я мог бы сделать это:
List<String> matched = new ArrayList<String>();
for (String it : strings) {
if (it.startsWith(match)) {
matched.add(it);
}
}
ноэто заняло бы много времени, если бы моя коллекция имела порядок миллионов строк, и еще хуже, если число подходящих строк также велико.
Проблема высокого уровня в том, что я хочу ответить на следующий вопрос для приложения, которое я пишу: «кто из моих друзей рекомендовал продукт A для продукта B?».Я мог бы сохранить эту информацию в таблице sql и выполнить следующую инструкцию:
select recommender from recs where username='me' and prodIdA='a' and prodIdB='b';
Мне интересно, может ли что-то нестандартное в java / C / C ++ работать быстрее, используя закодированные плоские строки, как у меня было выше:
myusername_prodIdA_prodIdB_recommenderusername
Идея состоит в том, что вы можете выполнить операцию запуска с всей коллекцией закодированных строк, чтобы получить ответ.
IЯ знаю, что попытка реализовать собственное решение, подобное этому, скорее всего, не пригодна для использования в производственной среде, поэтому некоторые sql db были бы лучше, просто любопытно,
Спасибо