2013-07-08 3 views
-2

я обязан добавить очень большое количество элементов в set.I было думать о следующей реализациикак добавить большое количество записей в наборе

Set<String> myset = new HashSet<String>(){{ 
    add("name1"); 
    add("name2e"); 
    //and so on 
}}; 

или создать множество инициализирован, а затем добавить значения

Set<String> myset = new HashSet<String>(); 
myset.add("name1"); 
//amd so on 

Но я более чем 1000 записей, и это не представляется возможным для меня, чтобы добавить их вручную один за one.Is можно добавить большую группу в целом, а не по одному?

+2

вы могли бы экстернализовать эти значения некоторых свойств файла и написать немного кода, чтобы читать его оттуда и заселить в 'Set' –

+4

Где вы получаете эти значения из? –

+0

Ваш вопрос непонятен, если у вас 1000 значений, то SOMEPLACE вам нужно будет записать эти значения. Либо в коде, в файле, базе данных и т. Д. И т. Д. –

ответ

1

Если у вас есть повторяющиеся значения, вы не можете использовать set здесь. поместите все значения в файл и прочитайте их с помощью java-кода.

тогда это будет легко.Вы можете использовать код, как следующий, чтобы сделать это

FileReader file=new FileReader("D:\\Test.txt"); 
    BufferedReader br=new BufferedReader(file); 
    String str; 
    Set<String> st=new HashSet<String>(); 
    while((str=br.readLine())!=null) 
    { 
     st.add(str); 
    }  
+1

Будучи параноиком, я бы обрезал слова. –

+0

Если вы знаете, что будет 1000+ записей, инициализируйте их так: Set st = new HashSet <> (1000); ' – jlordo

2

Похоже, вы должны как-то использовать петлю. Перейти так:

for (String element : elements) { 
    set.add(element); 
} 

Это до вас, чтобы выяснить, как получить elements. Прочитайте их из файла или что-то в этом роде. Если файл выглядит следующим образом:

name1

name2

name3

Просто прочитайте каждую строку и для каждой строки добавить, что к вашему набору.

0

Во-первых, это не очень хорошая идея. Его слишком странно:

Set<String> myset = new HashSet<String>(){{ 
    add("name1"); 
    add("name2e"); 
    //and so on 
}}; 
  • Наружный набор брекетов создать анонимный внутренний класс. HashSet не является окончательным, так что он работает.
  • Внутренний набор фигурных скобок представляет собой блок инициализатора. Не статический (который чаще используется), а блок инициализатора экземпляра.
  • Код Java внутри там вызывает метод add() на этом экземпляре.

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

String[] strs = new String[]{ 
    "name1", 
    "name2e", 
    //and so on 
}; 

Set<String> myset = new HashSet<String>(); 
myset.addAll(Arrays.asList(strs)); // This is the easy way 

Но это то, что я имел в своем распоряжении @nachokk отметил улучшение.

for (String s ; strs) { 
    myset.add(s); 
} 

Его довольно легко взять файл слов, который кто-то дает вам и загружает в текстовый редактор или текстовый редактор. Затем используйте поиск и замену, чтобы переформатировать его, чтобы было одно слово в строке. Затем добавьте двойную кавычку в начало каждой строки и двойную кавычку + запятую до конца. Что-то вроде TextPad, например, может выполнять поиск регулярных выражений для одной целой строки и добавлять символы в начало и конец.

Это можно вырезать и вставить в код Java выше.

+2

или 'myset = new HashSet <> (Arrays.asList (strs));' – nachokk

+0

@nachokk Duh. Я только исправлю это, потому что ваш код не совсем прав, но вы заслуживаете признания за такой очевидный бит кода. –

+0

не плохо мой код, я думаю, это инъекция конструктора и вывод алмаза (Java 7), а ваш цикл foreach с ':' вместо ';' – nachokk

Смежные вопросы