- Esattamente come oggetti EnumSet sono istanziati e utilizzati?
L'EnumSet è una "classe astratta" ed è preferito rispetto HashSet quando si dispone di un certo numero di "chiavi" che è noto in anticipo. Ad esempio quando hai una chiave di configurazione.
Il prestazioni sono meglio di HashSet perché "... dal momento che le costanti Enum sono unici e ha una lunghezza pre-definita, in quanto non è possibile definire una nuova costante enum in fase di esecuzione, permette API Java progettista di altamente ottimizzare EnumSet ... "(per saperne di più: http://javarevisited.blogspot.com/2014/03/how-to-use-enumset-in-java-with-example.html#ixzz3jNcyB8ve)
È possibile creare un'istanza con un sacco di metodo factory, per esempio EnumSet.of (...)
- Perché è possibile utilizzare il metodo add() per oggetti EnumSet?
Dopo aver creato un "EnumSet" oggetto è possibile aggiungere a run-time un altro elemento con la "add" metodo. Se si dispone ad esempio di un elenco di chiavi di configurazione, è possibile rappresentare EnumSet con i tasti "selezionati" e aggiungerli in fase di runtime.
package sample.test;
import java.util.EnumSet;
public class Foo {
public enum SimpleConfigEnum { KEY1, KEY2, KEY3};
/**
* Example of EnumSet with add
*/
public static void main(String[] args) {
//Create an enumSet with two elements: KEY1,KEY2
EnumSet<SimpleConfigEnum> eSet = EnumSet.of(SimpleConfigEnum.KEY1, SimpleConfigEnum.KEY2);
System.out.println(eSet);
//... add another element --> KEY3
eSet.add(SimpleConfigEnum.KEY3);
System.out.println(eSet);
}
}
L'output è:
[KEY1, KEY2]
[KEY1, KEY2, KEY3]
si dovrebbe includere che l'EnumSet implementa le interfacce che implementa AbstractSet. Ciò assicura che add(), iterator(), remove(), ... è nel contratto per EnumSet. – Taemyr