Я прошу прощения, если есть аналогичный вопрос, заданный раньше, но только один, который я мог найти, - это как найти похожие шаблоны в списках/массивах строк
Проблема проста. Существует два больших массива строк. И мне нужно выяснить сходство. Сходство - просто количество подобных строк.
String [] A = {"A", "B", "C", "D"}; String [] B = {"X", "Y", "B", "D"};
Сходство между этими двумя списками - 2.
Очевидное решение - путь грубой силы. Просто сравните каждое слово с любым другим словом. Но какое следующее лучшее решение?
Использует ли хэш-карту эффективное решение? Перейдите по одному списку и поместите каждое слово в хэш-карту. Затем посмотрите, сколько из второго списка ключей содержится в хэш-карте.
Является ли это общепринятым способом выполнения этого типа проблемы? Кажется, есть решения на основе дерева, но они не кажутся прямолинейными.
Спасибо.
Используйте HashSet
. Он обеспечивает функциональность для пересечения.
list1 // your 1st list
list2 // your second list
Set<Type> s1 = new HashSet<Type>();
s1.addAll(list1); // add your values from list 1
Set<Type> s2 = new HashSet<Type>();
s2.addAll(list2); // add your values from list 2
Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
System.out.println(intersection.size());
Вы можете обратиться к интерфейсу Set
в Учебниках Java
Вы можете сделать резервную копию каждого массива в Set, а затем найти пересечение:
Set<String> firstSet = new HashSet<String>(Arrays.asList(firstArray));
Set<String> secondSet = new HashSet<String>(Arrays.asList(secondArray));
firstSet.retainAll(secondSet);
System.out.println(firstSet.size());