Hashset实现输出

时间:2016-03-17 10:07:42

标签: java

对于这段代码,我被要求解释输出与输入的不同之处:

是否与传入的字符串对象和返回的字符串文字有关?

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);
    }
}

2 个答案:

答案 0 :(得分:0)

如果add(..)中存在具有相同内容的字符串,则HashSet函数返回false(并且显然未添加副本)。因此,如果if (!s.add(a))中存在重复的字符串,则args将为真; s.size() <= args.length

答案 1 :(得分:0)

第一个输出将按顺序打印重复的输入参数,因为元素被添加到集合中,如果元素已经存在,其boolean add(E e)方法将返回false。

第二个输出将打印结果集的大小,这可能与原始参数列表的大小不同,因为该集将仅包含唯一元素,然后是所有元素,很可能是完全不同的顺序。

来自HashSet文档:

  

它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。