我必须设置字符串
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抱歉,这不是我遇到的实际问题。这只是我想知道的一个想法。
答案 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?中涵盖了比较集合的更平衡的方法 - 适当数据结构的内存成本通常不如运行时成本那么令人担忧。