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

Java:比较两个字符串数组并删除两个数组中都存在的元素

万俟渊
2023-03-14
问题内容

这主要是一个性能问题。我有一个字符串数组AllUids中现有的所有用户的主列表。我还列出了String数组EndUids中存在的所有已过期用户。

我正在使用Java进行工作,我的目标是从主列表AllUids中删除截止日期数组中存在的所有用户。我知道PHP有一个叫做array_diff的函数。

我很好奇Java是否具有可以比较两个数组并删除两个相似的元素的东西。我的目标是这里的性能,这就是为什么我问一个内置函数。我不想添加任何特殊包。

我考虑过编写一个递归函数,但是看起来效率很低。两个列表中都有成千上万的用户。为了存在于过期日期列表中,您必须存在于AllUids列表中,直到删除。

例:

String[] AllUids = {"Joe", "Tom", "Dan", "Bill", "Hector", "Ron"};

String[] EndUids = {"Dan", "Hector", "Ron"};

我正在寻找的功能:

String[] ActiveUids = AllUids.RemoveSimilar(EndUids);

ActiveUids看起来像这样:

{"Joe", "Tom", "Bill"}

谢谢大家,显然我可以提出这样的循环,但是我不确定这样做会有效。这是每天都会在生产机器上运行的东西。


问题答案:

Commons
Collections
有一个称为CollectionUtils的类和一个名为removeAll的静态方法,该方法带有一个初始列表和要从该列表中删除的东西列表:

Collection removeAll(Collection collection,
                     Collection remove)

如果您使用用户列表而不是数组,那应该可以实现您想要的功能。您可以使用Arrays.asList()非常容易地将数组转换为列表,以便…

Collection ActiveUids = CollectionUtils.removeAll(Arrays.asList(AllUids), 
                                                  Arrays.asList(EndUids))

编辑:我也对此进行了一些研究,并在Commons Collections中使用ListUtils找到了以下解决方案:

List diff = ListUtils.subtract(Arrays.asList(AllUids), Arrays.asList(EndUids));

漂亮整齐…



 类似资料:
  • 我有: String1[]具有数字、数量、度量单位、查找数字参数 String2[]具有操作、级别、编号、组织ID、容器、版本、视图、数量、度量单位、参考指示符、跟踪代码、查找编号、行号、组件参考、数量选项、包含选项、类型 我用for循环比较了两个字符串,并用逗号将它们分开。我想在string2的哪个索引处找到string1。我想把这些索引存储在一个整数中。 请给任何想法。 提前谢谢

  • 问题内容: 我有一个带有〜已知二进制序列的字节数组。我需要确认二进制序列是应该的。除之外,我还尝试了其他方法,但均无济于事。 问题答案: 在您的示例中,您具有: 在处理对象时,java中会比较 参考值 。您正在检查对by返回的数组的引用是否与所保存的引用相同,这当然永远不会正确。此外,数组类不会覆盖,因此其行为仅是比较参考值。 为了比较两个数组的 内容 ,Arrays类提供了静态数组比较方法。

  • 问题内容: 如果它具有另一个数组的元素,是否还有其他更好的方法可以从一个数组中删除重复项呢,它工作得很好。 问题答案: 或者,随着ES6的推出:

  • 问题内容: 有人遇到过这个问题吗?假设您有两个类似以下的数组 有没有一种方法可以比较b中a中的哪些元素?例如, 我正在尝试避免循环,因为要花费数百万个元素才能解决问题。有任何想法吗? 干杯 问题答案: 实际上,有一个比以下任何一种方法更简单的解决方案: 所得的c为:

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案: