Java 寻找两个字符串数组的相似性

Java 寻找两个字符串数组的相似性,java,arrays,string,compare,Java,Arrays,String,Compare,如果之前有人问过类似的问题,我很抱歉,但我只能找到一个 问题很简单。有两个大的字符串数组。我需要找出相似之处。相似性只是相似字符串的数量 字符串[]A={“A”、“B”、“C”、“D”}; 字符串[]B={“X”,“Y”,“B”,“D”} 这两个列表之间的相似性为2 显而易见的解决办法是采用暴力手段。把每个词和其他词比较一下。 但下一个最佳解决方案是什么 使用哈希映射是有效的解决方案吗? 浏览一个列表并将每个单词放入哈希映射。然后查看哈希映射中包含了多少第二个列表键 这是普遍接受的解决此类问题的

如果之前有人问过类似的问题,我很抱歉,但我只能找到一个

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

字符串[]A={“A”、“B”、“C”、“D”}; 字符串[]B={“X”,“Y”,“B”,“D”}

这两个列表之间的相似性为2

显而易见的解决办法是采用暴力手段。把每个词和其他词比较一下。 但下一个最佳解决方案是什么

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

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


谢谢。

使用
哈希集。它提供了获取交叉点的功能

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());
list1//您的第一个列表
列表2//您的第二个列表
Set s1=新的HashSet();
s1.添加所有(列表1);//从列表1中添加您的值
Set s2=新的HashSet();
s2.添加所有(列表2);//从列表2中添加您的值
集合交集=新哈希集合(s1);
交叉口。保留(s2);
System.out.println(intersection.size());

您可以参考

中的
Set
界面使用
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());
list1//您的第一个列表
列表2//您的第二个列表
Set s1=新的HashSet();
s1.添加所有(列表1);//从列表1中添加您的值
Set s2=新的HashSet();
s2.添加所有(列表2);//从列表2中添加您的值
集合交集=新哈希集合(s1);
交叉口。保留(s2);
System.out.println(intersection.size());

您可以参考

中的
集合
界面,您可以将每个数组备份到集合中,然后找到交集:

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());
Set firstSet=newhashset(Arrays.asList(firstArray));
Set secondSet=newhashset(Arrays.asList(secondArray));
第一组。保留(第二组);
System.out.println(firstSet.size());

您可以将每个阵列备份到集合中,然后查找交点:

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());
Set firstSet=newhashset(Arrays.asList(firstArray));
Set secondSet=newhashset(Arrays.asList(secondArray));
第一组。保留(第二组);
System.out.println(firstSet.size());

谢谢。这正是我想要的。@madu没问题。集合和地图界面非常棒。谢谢。这正是我想要的。@madu没问题。集合和地图界面非常棒。