比较两组字符串最便宜的方法

时间:2017-04-01 03:21:19

标签: java data-structures

我必须设置字符串

set 1:

    "hello"
    "world"
    "stackoverflow"

set 2:
    "world"
    "hello"
    "stackoverflow"

在我尝试比较内容之前,我确切地知道这两个集合只包含唯一值。所以我没有考虑 java Set进行独特的测试。

所以在 Java 中,比较这两组最便宜的方法是什么?通过最便宜的,我的意思是内存之类的。

我知道我可以执行ArrayList.contains() forLoop ,有更好的方法吗?

当包含相同长度的内容时,我被告知 Java HashSet消耗的资源是ArrayList的5倍。这是真的吗?

更新

我没有你的样品,因为这只是我想到的一个想法。

通过两组字符串,我的意思是 set ,这个 set 也可以存储在 Java ArrayList

我想要的是

是比较这两组字符串以了解它们是否包含相同的内容。当然,我知道在他们都包含独特内容的行动之前。

UPDATE

抱歉,这不是我遇到的实际问题。这只是我想知道的一个想法。

2 个答案:

答案 0 :(得分:1)

我完全不知道这个的表现,只是为了增加一个可能的解决方案......

String[] a = {"hello","world","stackoverflow"};
String[] b = {"world","hello","stackoverflow"};
Arrays.sort(a);
Arrays.sort(b);
System.out.println(Arrays.equals(a,b) ? "same" : "different");

结果:

same

答案 1 :(得分:0)

由于你唯一关心的是内存占用,而不是数组上的基本嵌套循环(或者此刻存储这些字符串的任何集合),因此可以完美地运行,并且只使用固定数量的额外空间(对于循环计数器)。

您也可以使用contains来缩短代码 - 该函数 应该需要固定数量的内存,但是你会浪费一些调用堆栈帧。

请注意,这将交换运行时内存使用率的比较性能。对时间表现的惩罚是显着的,并且对于更多10-20个项目的大小,可能很容易注意到。例如在What is the fastest way to compare two sets in Java?中涵盖了比较集合的更平衡的方法 - 适当数据结构的内存成本通常不如运行时成本那么令人担忧。