当前位置: 首页 > 面试题库 >

从两个字符串数组返回公共元素的最有效方法

高寒
2023-03-14
问题内容

在Java中,从两个字符串数组返回公共元素的最有效方法是什么?我可以用一对for循环来做到这一点,但这似乎并不是很有效。根据对类似SO问题的评论,我能想到的最好的方法是转换为a
List,然后应用:retainAll)

List<String> compareList = Arrays.asList(strArr1);
List<String> baseList = Arrays.asList(strArr2);
baseList.retainAll(compareList);

问题答案:

编辑:

这是单线的:

compareList.retainAll(new HashSet<String>(baseList));

retainAllIMPL(类AbstractCollection中)遍历this,以及用途contains()的说法。将参数转换为a
HashSet将导致快速查找,因此a中的循环retainAll将尽快执行。

另外,名称baseList暗示它是一个常量,因此,如果缓存以下内容,将会获得显着的性能改进:

static final Set<String> BASE = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList("one", "two", "three", "etc")));

static void retainCommonWithBase(Collection<String> strings) {
    strings.retainAll(BASE);
}

如果要保留原始列表,请执行以下操作:

static List<String> retainCommonWithBase(List<String> strings) {
   List<String> result = new ArrayList<String>(strings);
   result.retainAll(BASE);
   return result;
}


 类似资料:
  • 问题内容: 我正在寻找一个Python库,用于从 一组字符串中 找到最长的公共子 字符串 。有两种方法可以解决此问题: 使用后缀树 使用动态编程。 实施的方法并不重要。重要的是,它可以用于 一组字符串 (不仅是两个字符串)。 问题答案: 这些成对的函数将在任意字符串数组中找到最长的公共字符串: 毫无疑问,该算法可以得到改进,而且我对Python的接触也很少,因此也许它在语法上也可能更有效,但是它应

  • 我有一个方法toString,它应该返回数组列表的连接元素字符串。我遇到的问题是无法将T类型的数组列表(因为它应该是泛型的)转换为字符串。

  • 代码不止一次返回0和公共数字。我想让它返回一个数组与公共数字一次!那么,如何返回一个数组,数组中的数字对两个数组都是通用的。我想返回{2,7,4}-类似这样的东西。当我试图返回数组时,我总是出现越界异常。谢谢,巴里

  • 我遇到了一个问题语句,要在给定的两个子字符串之间找到所有公共子字符串这样一种方式,在每种情况下都必须打印最长的子字符串。问题声明如下: 编写一个程序来查找两个给定字符串之间的公共子字符串。但不包括包含在较长公共子字符串中的子字符串。 null 在这种情况下,您不必使用字符串实用程序方法,如:contains、indexOf、StringTokenizer、split和replace。 我的算法是这