## org.biojava.bio.symbol
Interface FiniteAlphabet

All Superinterfaces:
  Alphabet, Annotatable, Changeable

All Known Implementing Classes:
  AbstractAlphabet, IntegerAlphabet.SubIntegerAlphabet, SimpleAlphabet, SingletonAlphabet, SoftMaskedAlphabet

    public interface FiniteAlphabet

extends Alphabet

An alphabet over a finite set of Symbols.

This interface makes the distinction between an alphabet over a finite (and possibly small) number of symbols and an Alphabet over an infinite (or extremely large) set of symbols. Within a FiniteAlphabet, the == operator should be sufficient to decide upon equality for all AtomicSymbol instances.

The alphabet functions as the repository of objects in the fly-weight design pattern. Only symbols within an alphabet should appear in object that claim to use the alphabet - otherwise something is in error.

Author:
  Matthew Pocock

Nested Class Summary

Nested classes/interfaces inherited from interface org.biojava.bio.Annotatable
`Annotatable.AnnotationForwarder`

Field Summary

Fields inherited from interface org.biojava.bio.symbol.Alphabet
`EMPTY_ALPHABET, PARSERS, SYMBOLS`

Fields inherited from interface org.biojava.bio.Annotatable
`ANNOTATION`

Method Summary
`void` `addSymbol(Symbol s)` Adds a symbol to this alphabet.
`Iterator<Symbol>` `iterator()` Retrieve an Iterator over the AtomicSymbols in this FiniteAlphabet.
`void` `removeSymbol(Symbol s)` Remove a symbol from this alphabet.
`int` `size()` The number of symbols in the alphabet.

Methods inherited from interface org.biojava.bio.symbol.Alphabet
`contains, getAlphabets, getAmbiguity, getGapSymbol, getName, getSymbol, getTokenization, validate`

Methods inherited from interface org.biojava.bio.Annotatable
`getAnnotation`

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Method Detail

### size

    int size()

  The number of symbols in the alphabet.

  Returns:
    the size of the alphabet

### iterator

    Iterator<Symbol> iterator()

  Retrieve an Iterator over the AtomicSymbols in this FiniteAlphabet.

  Each AtomicSymbol as for which this.contains(as) is true will be returned exactly once by this iterator in no specified order.

  Returns:
    an Iterator over the contained AtomicSymbol objects

### addSymbol

    void addSymbol(Symbol s)
                   throws IllegalSymbolException,
                          ChangeVetoException

  Adds a symbol to this alphabet.

  If the symbol matches more than one AtomicSymbol, then each symbol matching it will be added.

  Parameters:
    `s` - the Symbol to add
  Throws:
    `IllegalSymbolException` - if the symbol is null, or if for any reason it can't be added
    `ChangeVetoException` - if either the alphabet doesn't allow symbols to be added, or the change was vetoed

### removeSymbol

    void removeSymbol(Symbol s)
                      throws IllegalSymbolException,
                             ChangeVetoException

  Remove a symbol from this alphabet.

  If the symbol matches multiple AtomicSymbols, then each matching symbol it will be removed.

  Parameters:
    `s` - the Symbol to removeintGot
  Throws:
    `IllegalSymbolException` - if the symbol is null, or if for any reason it can't be removed
    `ChangeVetoException` - if either the alphabet doesn't allow symbols to be added, or the change was vetoed