Enumset
Enumset é um recipiente genérico do tipo Java Enum. Como o Java StitledSet, TreeSet, Hashset e outros contêineres, por que ele precisa de um enumset adicional <T>? A resposta é que o enumset tem certas características. Por exemplo, o enumset é muito rápido. Afinal, não vou listar outros recursos um por um, o conteúdo deste artigo não apresenta os recursos do enumset.
Aulas de coleta projetadas especificamente para aulas de enumeração, todos os elementos devem ser tipos de enumeração
Os elementos conjuntos do enumset são ordenados e são armazenados internamente por vetores de bits, para que ocupem menos memória e tenham alta eficiência.
Elementos nulos não são permitidos
Código -fonte
pacote java.util; importar sun.misc.sharedsecrets; classe abstrata pública enumset <e estende enum <e>> estende o abstractSet <e> implementa clonável, java.io.Serializable { / *** elemento tipo* / classe final <e> elementType; / *** armazenar elementos através do Array*/ Final Enum [] Universo; enum estático privado [] zero_length_enum_array = new enum [0]; Enumset (classe <e> elementType, enum [] universo) {this.ElementType = elementType; this.Universe = Universo; }/** * Crie um conjunto de enum vazio e formule seu tipo de elemento * @param elementType o objeto de classe do tipo de elemento para este enum * set * @throws nullPointerException Se <Tt> elementType </tt> é null */public static <e estende o enum <e>> enumet <e> NENHUMOF (a classe> getUniverse (ElementType); if (universo == null) lançar uma nova classe ClassCexception (ElementType + "não um enum"); if (universo.length <= 64) retorna novo regularENumset <> (elementType, universo); else Retornar New Jumboenumset <> (ElementType, Universo); }/** * Crie uma enumeração contendo todos os elementos no conjunto de tipos de elemento especificado * * @param elementType o objeto de classe do tipo de elemento para este enum * set * @throws nullPointerException se <Tt> elementType </tt> é nulo */public static <e exsends enum <e> Nenhumof (ElementType); resultado.addall (); resultado de retorno; } /** * Adiciona todos os elementos do tipo de enum apropriado a este conjunto de enum *, que está vazio antes da chamada. */ Abstract void addall (); /** * Crie um conjunto de enum com o mesmo tipo de elemento que o conjunto de enum especificado * * @param s o conjunto de enum do qual inicializar esse conjunto de enum * @throws nullpointerException se <tt> s </tt> é nulo */public static <e estends enum <e >> enumset <e> cópia (enumset <e>) } /** * Create an enum set from which to initialize this enum set * @throws IllegalArgumentException if <tt>c</tt> is not an * <tt>EnumSet</tt> instance and contains no elements * @throws NullPointerException if <tt>c</tt> is null */ public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c) {if (c instanceof enumset) {return ((enumset <e>) c) .clone (); } else {if (c.isempty ()) lançar uma nova ilegalArgumentException ("coleção está vazia"); Iterador <e> i = c.Iterator (); E primeiro = i.next (); Enumset <e> resultado = enumset.of (primeiro); while (i.hasnext ()) resultado.add (i.next ()); resultado de retorno; }}/** * Crie um conjunto de enum a partir de cujo complemento para inicializar esse conjunto de enum * @throws nullPointerException se <tt> s </tt> for nulo */public static <e estende enum <e>> enumset <e> complemento (enumset <e> s) {enumset <e> result = cópia do (s); resultado.complement (); resultado de retorno; }/** * 1 Coleção de enumeração de elemento * * @param e o elemento que esse conjunto deve conter inicialmente * @throws nullPointerException se <tt> e </tt> é nulo * @return Um conjunto de enumset inicialmente (e) (e) (e) o enumset (e) (e) (e). Nenhumof (E.GetDecLaringClass ()); resultado.add (e); resultado de retorno; } / ** * 2 Coleção de enumeração de elementos * * @param e1 Um elemento que esse conjunto é para conter inicialmente * @param e2 Outro elemento que esse conjunto é conter inicialmente * @THOLS NULLPointerException Se algum parâmetros é nulo * @return a enum Enumset <e> resultado = Nenhumof (e1.getDecLaringClass ()); resultado.add (e1); resultado.add (e2); resultado de retorno; } / ** * Coleção de enumeração de elementos * * @param e1 Um elemento que esse conjunto é para conter inicialmente * @param e2 Outro elemento que esse conjunto é conter inicialmente * @param e3 Outro elemento que esse conjunto é para conter inicialmente * @THOWS CONTENSO <MULLPONTEREXCECCENTE * Se algum parâmetro é nulo * @GrenEnd AneNend Contending Inicialmente de (E E1, E E2, E E3) {enumset <E> resultado = Nenhumof (e1.getDecLaringClass ()); resultado.add (e1); resultado.add (e2); resultado.add (e3); resultado de retorno; } / ** * Conjunto de enumeração de 4 elementos * @param e1 Um elemento que esse conjunto é para conter inicialmente * @param e2 Outro elemento que esse conjunto é conter inicialmente * @param e3 Outro elemento que esse conjunto é para conter inicialmente * @param e4 outro elemento que esse conjunto é para conter * @THOUNS ANLULUMUMENTIMENTIALMENTIALMENTEMEXCEMENTEMENTRESSE ELETEMENTO ELEFT INFILTRATEMENTE STEMTROTE STETS * @THOURSTUMENTRESSEXCOMENTEMENTRESSEMENTO E4 estende enum <e>> enumset <e> de (e e1, e e2, e e3, e e4) {enumset <e> resultado = nenhumof (e1.getDecLaringClass ()); resultado.add (e1); resultado.add (e2); resultado.add (e3); resultado.add (e4); resultado de retorno; } /** * Coleção de enumeração de 5 elementos * * @param e1 Um elemento que esse conjunto é para conter inicialmente * @param e2 Outro elemento que esse conjunto é conter inicialmente * @param e3 Outro elemento que esse conjunto é para conter o que é inicialmente * @param e4 outro elemento que este conjunto é para conter * @param e5 outro elemento * Conjunto de enum inicialmente contendo os elementos especificados */ public static <e estende enum <e>> enumset <e> de (e1, e e2, e e3, e e4, e e5) {enumset <e> resultado = nenhumof (e1.getDecLaringClass ()); resultado.add (e1); resultado.add (e2); resultado.add (e3); resultado.add (e4); resultado.add (e5); resultado de retorno; }/** * n * * @param Primeiro um elemento que o conjunto é conter inicialmente * @param Rest os elementos restantes que o conjunto deve conter inicialmente * @throws NullPointerException se algum dos elementos especificados for nulo, * ou se elefSaf <Tt> Rest </tt> for null * @return e shusts slitEnSars */TT> */Tt </tt> for null * @return e se definir, definir -se inicialmente os elementos */ Enumset <e> de (e primeiro, e ... repouso) {enumset <e> resultado = Nenhumof (primeiro.getDecLaringClass ()); resultado.add (primeiro); para (E e: REST) resultado.Add (e); resultado de retorno; } /** * Coleção enumerada de elementos no intervalo * @param do primeiro elemento da faixa * @param para o último elemento no intervalo * @throws nullPointerException if {@code de} ou {@code a} é null * @THELARGALARGEMCECTION * se {@Code de..COMPOTO (} para) 0 @THELARGALARGEMCECTION * se {@Code a.COd.COMPOTO para} para) 0. intervalo definido pelos dois pontos de extremidade especificados */ public static <e estende enum <e>> enumset <e> intervalo (e de, e a) {if (from.compareto (para)> 0) lançar uma nova imagem ilegalArgumentException (de + ">" + a); Enumset <e> resultado = Nenhumof (de.getDecLaringClass ()); resultado.AddRange (de, para); resultado de retorno; } /** * Adiciona o intervalo especificado a este conjunto de enum, que está vazio antes * da chamada. */ Abstract void AddRange (E de, E para); /*** Retorna uma cópia deste conjunto. * * @return Uma cópia deste conjunto */ public Enumset <E> clone () {try {return (enumset <e>) super.clone (); } catch (clonenotsupportEdException e) {tiro novo assertionError (e); }} /*** Complementa o conteúdo deste conjunto de enum. */ Abstract Void Complement (); /*** lança uma exceção se E não for do tipo correto para este conjunto de enum. */ Final Void TypeCheck (E E) {classe Eclass = E.GetClass (); if (eclass! = ElementType && Eclass.getSuperclass ()! = ElementType) lança nova classeCastException (eclass + "! =" + elementType); } /** * Retorna todos os valores que compreendem E. * O resultado é não relacionado, armazenado em cache e compartilhado por todos os chamadores. */ estática privada <e estende enum <e>> e [] getUniverse (classe <e> elementType) {return sharedsecrets.getjavalangacccess () .getEnumConsShared (elementType); } /** * Esta classe é usada para serializar todas as instâncias do enumset, independentemente do tipo de implementação. Ele captura seu "conteúdo lógico" e eles * são reconstruídos usando fábricas estáticas públicas. Isso é necessário * para garantir que a existência de um tipo de implementação específico seja * um detalhe de implementação. * * @Serial Incluir * / classe estática privada serializaçãoProxy <e estende enum <e>> implementa java.io.Serializable { / ** * o tipo de elemento deste conjunto de enum. * * @Serial */ classe final privada <E> elementType; /*** Os elementos contidos neste conjunto de enum. * * @Serial */ private final enum [] elementos; SerializationProxy (enumset <E> set) {elementType = set.ElementType; elementos = set.toArray (zero_length_enum_array); } objeto privado readResolve () {enumset <e> resultado = enumset.noneof (elementType); para (enum e: elementos) result.add ((e) e); resultado de retorno; } private estático final serialversionuid = 362491234563181265L; } Object writereplace () {return nova serializationproxy <> (this); } // Método readObject para o padrão de proxy de serialização // Consulte Java eficaz, segunda ed., Item 78. Private void readObject (java.io.ObjectInputStream) lança java.io.inValidObjectException {Throw New Java.IO.InValDObjectException ("proxy exigido); }}Resumir
O exposto acima é sobre a leitura do código -fonte abstrato Enumset, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!