我只是想知道,一次将几个项目添加到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]);
}
感谢您的任何见解!
答案 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)
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));