Я прошу вибачення, якщо є аналогічне питання, яке задано раніше, але тільки те, що я міг знайти Як знайти схожі шаблони в списках / масивах рядків
Проблема проста. Є два великі масиви рядків. І мені потрібно з'ясувати подібність. Подібність - це просто число подібних рядків.
String [] A = {"A", "B", "C", "D"}; String [] B = {"X", "Y", "B", "D"};
Схожості між цими двома списками складають 2.
Очевидне рішення - це груба сила. Просто порівняйте кожне слово з кожним іншим словом. Але що є наступним найкращим рішенням?
Чи використовує хеш-карта ефективне рішення? Пройдіть один список і покладіть кожне слово на хеш-карту. Потім подивіться, скільки ключів другого списку містяться в хеш-карті.
Чи це загальноприйнятий спосіб виконувати цей тип проблеми? Здається, є дерево-рішень, але вони не здається прямою.
Дякую.
Відповіді:
2 для відповіді № 1Використовуйте a 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
2 для відповіді № 2
Ви можете зробити резервну копію кожного масиву в 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());