如果之前有过类似的问题,我很抱歉,但只有一个我能找到How to find similar patterns in lists/arrays of strings
问题很简单。有两个大型字符串数组。我需要找出相似之处。相似性只是相似字符串的数量。
String [] A = {" A"," B"," C"," D"}; 字符串[] B = {" X"," Y"," B"," D"};
这两个名单之间的相似性是2。
显而易见的解决方案是蛮力方式。只需将每个单词与其他单词进行比较。 但是,下一个最佳解决方案是什么?
使用哈希映射是一种有效的解决方案吗? 浏览一个列表并将每个单词放入哈希映射中。然后查看哈希映射中包含多少个第二个列表键。
这是普遍接受的执行此类问题的方法吗? 似乎有基于树的解决方案,但它们似乎并不简单。
谢谢。
答案 0 :(得分: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());
您可以参考The Java Tutorials
中的Set
界面
答案 1 :(得分: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());