有没有更好的方法一次向Set添加几个单词?

时间:2011-04-26 05:54:55

标签: java hashset

我只是想知道,一次将几个项目添加到HashSet的最佳方法是什么?

我正在做一个家庭作业,其中对象是迭代.java文件并计算文件中的关键字。它在分配描述的底部说(“提示:创建一个包含所有Java关键字的集合”)

我对HashSets并不完全熟悉,我不知道如何一次添加大量单词,我当然不想通过.add(“final”).add(“true “)..依此类推每个关键字。

所以,我创建了一个包含所有这些单词的数组列表。然后我使用for循环来循环并将每个添加到set.However,这似乎是多余的。如果我在数组中有所有关键字,那么我不明白为什么我需要将它们添加到HashSet以完成赋值。 但是,为了在HashSets上学习更多东西,有没有办法在没有我使用的方法(除了1比1)之外做到这一点?

String[] aryKeywords = { "abstract", "asset", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private", "protected", "public", "return", "short", "static", "strictftp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while", "false", "null", "true" };    
    Set<String> jKeywords = new HashSet<String>();
    for (int i = 0; i < aryKeywords.length; i++) {
        jKeywords.add(aryKeywords[i]);
    }

感谢您的任何见解!

7 个答案:

答案 0 :(得分:3)

您可以使用:

Set<String> jKeywords = new HashSet<String>(Arrays.asList(aryKeywords));

或者如果您想要内联指定它们:

Set<String> jKeywords = new HashSet<String>(Arrays.asList(
    "abstract", "asset", "boolean", /* etc */));

如果你曾经 一套,你可以使用addAll

jKeywords.addAll(Arrays.asList(extraMembers));

答案 1 :(得分:3)

Jon Skeet的回答是正确的。另一种(根据其文档据称更快)方法是:

Set<String> jKeywords = new HashSet<String>();
Collections.addAll(jKeywords, aryKeywords);

或者将它们指定为内联(以反映Jon的答案):

Collections.addAll(jKeywords, "abstract", "asset", "boolean", /* ... */);

答案 2 :(得分:1)

你可以做到

jKeywords.addAll(Arrays.<String>asList(aryKeywords));

但是为更清洁的代码添加更多垃圾

答案 3 :(得分:0)

有一些相同的变体(双{{技巧,我不喜欢,但如果你真的想要我的继承人),但不,Java在这里真的没有完美的答案。为了你。另一个变体是你做的String [],然后是Arrays.asList,它进入List然后是set.addAll。从效率POV来看,没有一个特别好。

答案 4 :(得分:0)

您可以使用Arrays.asList()

Set<String> jKeywords = new HashSet<String>(Arrays.asList(aryKeywords));

答案 5 :(得分:0)

Set<String> jKeywords = new HashSet<String>(Arrays.asList(aryKeywords));

答案 6 :(得分:0)

我认为您不能绕过将项目表示为数组。但是,您可以使用

之类的结构一次性添加它们
new HashSet (Arrays.asList(aryKeywords));