对于这段代码,我被要求解释输出与输入的不同之处:
是否与传入的字符串对象和返回的字符串文字有关?
import java.util.*;
public class C {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
if (!s.add(a))
System.out.println("here: " + a);
System.out.println(s.size() + " there: " + s);
}
}
答案 0 :(得分:0)
如果add(..)
中存在具有相同内容的字符串,则HashSet
函数返回false(并且显然未添加副本)。因此,如果if (!s.add(a))
中存在重复的字符串,则args
将为真; s.size() <= args.length
。
答案 1 :(得分:0)
第一个输出将按顺序打印重复的输入参数,因为元素被添加到集合中,如果元素已经存在,其boolean add(E e)
方法将返回false。
第二个输出将打印结果集的大小,这可能与原始参数列表的大小不同,因为该集将仅包含唯一元素,然后是所有元素,很可能是完全不同的顺序。
来自HashSet文档:
它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。