Инициализиране на HashSet по време на изграждането

1. Общ преглед

В този бърз урок ще представим различни методи за инициализиране на HashSet със стойности по време на неговото изграждане .

Ако вместо това искате да изследвате функциите на HashSet , вижте тази основна статия тук.

Ще се потопим в вградените в Java методи от Java 5 и преди, последвано от нов механизъм, въведен от Java 8 . Също така ще видим персонализиран метод на помощната програма и накрая ще изследваме функциите, предоставени от библиотеките за събиране на трети страни , по-специално Google Guava.

Ако имате късмет, че вече сте мигрирали към JDK9 +, можете просто да използвате фабрични методи за събиране.

2. Вградени методи на Java

Нека започнем с разглеждане на три вградени механизма, налични от Java 5 или преди .

2.1. Използване на друг екземпляр на колекция

Можем да предадем съществуващ екземпляр на друга колекция, за да инициализираме Set . В долния пример използваме вграден създаден Списък :

Set set = new HashSet(Arrays.asList("a", "b", "c"));

2.2. Използване на анонимен клас

В още един друг подход можем да използваме анонимния клас, за да добавим елемент към HashSet .

Обърнете внимание на използването на двойни къдрави скоби. Този подход е технически много скъп, тъй като създава анонимен клас всеки път, когато бъде извикан.

Така че в зависимост от това колко често трябва да инициализираме Set, можем да се опитаме да избегнем използването на този подход:

Set set = new HashSet(){{ add("a"); add("b"); add("c"); }};

2.3. Използване на полезен метод на колекции от Java 5

Класът на помощната програма на Collections на Java предоставя метода с име singleton за създаване на Set с един елемент . Екземплярът Set, създаден с метода singleton , е неизменим, което означава, че не можем да добавим повече стойности към него.

Има ситуации, особено при модулното тестване, когато трябва да създадем набор с една стойност:

Set set = Collections.singleton("a");

3. Дефиниране на персонализиран метод на полезност

Можем да дефинираме статичен краен метод, както по-долу. Методът приема променливи аргументи .

Използване на Collections.addAll, който приема обекта за събиране и масив от стойности, е най-добър сред другите поради ниските режийни разходи за копиране на стойности.

В метод е използване на генерични лекарства, така че ние може да премине ценности от всякакъв вид:

public static final  Set newHashSet(T... objs) { Set set = new HashSet(); Collections.addAll(set, objs); return set; }

Полезният метод може да се използва в нашия код, както е показано по-долу.

Set set = newHashSet("a","b","c");

4. Използване на поток от Java 8

С въвеждането на Stream API в Java 8 имаме допълнителни опции. Можем да използваме Stream с колектори, както е показано в кода по-долу:

Set set = Stream.of("a", "b", "c") .collect(Collectors.toCollection(HashSet::new));

5. Използване на библиотека за събиране на трети страни

Има множество библиотеки на колекции на трети страни, включително Google Guava, Apache Commons Collections и Eclipse Collections, за да назовем само няколко.

Тези библиотеки предоставят удобни полезни методи за инициализиране на колекции като Set. Тъй като Google Guava е един от най-често използваните тук, имаме пример от него. Guava разполага с удобни методи за изменяеми и неизменяеми обекти на Set :

Set set = Sets.newHashSet("a", "b", "c");

По същия начин Guava има клас на помощна програма за създаване на неизменяеми екземпляри на Set , както можем да видим в примера по-долу.

Set set = ImmutableSet.of("a", "b", "c");

6. Заключение

В заключение видяхме множество начини, по които HashSet може да бъде инициализиран, докато е конструиран. Тези подходи не обхващат непременно всички възможни начини по никакъв начин. Това беше просто опит да се покажат най-често срещаните начини.

Един такъв подход, който не е разгледан тук, може да бъде използването на конструктора на обекти за конструиране на набор .

Както винаги пример за работещ код е достъпен в GitHub.