Есть ли лучший способ добавить несколько слов в набор одновременно? - PullRequest
0 голосов
/ 26 апреля 2011

Мне просто интересно, как лучше всего добавить несколько элементов в HashSet одновременно?

Я работаю над домашним заданием, где объект должен перебирать файл .java и считатьключевые слова в файле.В нижней части описания назначения написано («Подсказка: создайте набор для хранения всех ключевых слов Java»)

Я не совсем знаком с HashSets и не знаю, как добавить большую частьслов сразу, и я, конечно, не хотел проходить через .add ("final") .add ("true") .. и так далее для каждого ключевого слова.

Итак, я создал список массивовсо всеми этими словами.Затем я использовал цикл for для прохождения цикла и добавления каждого в набор. Однако, это кажется избыточным.Если у меня есть все ключевые слова в массиве, то я не понимаю, почему мне нужно было бы добавить их в 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 ]

3 голосов
/ 26 апреля 2011

Ответ Джона Скита правильный.Другой (предположительно более быстрый, согласно его документации) подход:

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

Или для указания их в строке (чтобы отразить ответ Джона):

Collections.addAll(jKeywords, "abstract", "asset", "boolean", /* ... */);
3 голосов
/ 26 апреля 2011

Вы можете использовать:

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 голос
/ 26 апреля 2011

вы могли бы сделать

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

но это добавляет больше мусора для более чистого кода

0 голосов
/ 26 апреля 2011

Я не думаю, что вы можете обойтись без представления ваших элементов в виде массива.Но вы можете добавить их все сразу, используя такую ​​конструкцию, как

new HashSet (Arrays.asList(aryKeywords));
0 голосов
/ 26 апреля 2011
Set<String> jKeywords = new HashSet<String>(Arrays.asList(aryKeywords));
0 голосов
/ 26 апреля 2011

Вы можете использовать Arrays.asList():

Set<String> jKeywords = new HashSet<String>(Arrays.asList(aryKeywords));
0 голосов
/ 26 апреля 2011

Есть некоторые ВАРИАНТЫ одного и того же (двойной {{трюк, который мне не нравится, но если вы действительно хотите, я буду упоминать), но нет, у Java на самом деле нет идеального ответа здесь.Для тебя.Другой вариант - это String [], который вы сделали, затем Arrays.asList его в список и затем set.addAll.Из POV эффективности никто не особенно хорош.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...