找到两个String数组的相似性

时间:2014-03-12 15:10:37

标签: java arrays string compare

如果之前有过类似的问题,我很抱歉,但只有一个我能找到How to find similar patterns in lists/arrays of strings

问题很简单。有两个大型字符串数组。我需要找出相似之处。相似性只是相似字符串的数量。

String [] A = {" A"," B"," C"," D"}; 字符串[] B = {" X"," Y"," B"," D"};

这两个名单之间的相似性是2。

显而易见的解决方案是蛮力方式。只需将每个单词与其他单词进行比较。 但是,下一个最佳解决方案是什么?

使用哈希映射是一种有效的解决方案吗? 浏览一个列表并将每个单词放入哈希映射中。然后查看哈希映射中包含多少个第二个列表键。

这是普遍接受的执行此类问题的方法吗? 似乎有基于树的解决方案,但它们似乎并不简单。

谢谢。

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());