searchable.hashtable

## Class HashTableExtLinked

- java.lang.Object
- - searchable.hashtable.HashTableExtLinked

- All Implemented Interfaces:
    Searchable

      class HashTableExtLinked
      extends java.lang.Object
      implements Searchable

  Implementace rozptýlené tabulky s vnějším zřetězením.

  Popis: K hešování je použita funkce Hash.hash (key), proto prvky tabulky musí být typu SearchableElementWithOrdinalKey, jinak by stačil typ SearchableElement.

  Užití: instance této třídy lze používat v aplikacích

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private SearchableFactory` | `factory` továrna na jednotlivé vyhledávací struktury, které budou vloženy do úložiště
    `private int` | `operationCtr` počítadlo provozního měření
    `private Searchable[]` | `store` úložiště

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HashTableExtLinked(int arraySize)` Vyrobí instanci třídy HashTableExtLinked.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `finalize()` Zruší instanci třídy HashTableExtLinked.
    `int` | `getCount()` Zjistí počet prvků v tabulce.
    `int` | `getOperationCounter()` Provozní měření.
    `void` | `getReadable(java.util.List<java.lang.String> aStrings)` Naplní kolekci řetězců čitelným obsahem tabulky.
    `int` | `getSortCounter()` Provozní měření.
    `void` | `insert(SearchableElement elem)` Vloží prvek do tabulky.
    `boolean` | `isEmpty()` Zjistí, zda je tabulka prázdná.
    `boolean` | `isFull()` Zjistí, zda je tabulka plná.
    `SearchableElement` | `remove(SearchableElement key)` Najde a odstraní prvek z tabulky.
    `SearchableElement` | `select(SearchableElement key)` Najde prvek v tabulce.
    `SearchableElement` | `update(SearchableElement elem)` Najde a upraví prvek z tabulky, případně vloží nový prvek do tabulky.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### store

          private Searchable[] store

      úložiště

    - #### factory

          private SearchableFactory factory

      továrna na jednotlivé vyhledávací struktury, které budou vloženy do úložiště

    - #### operationCtr

          private int operationCtr

      počítadlo provozního měření

  - ### Constructor Detail

    - #### HashTableExtLinked

          public HashTableExtLinked(int arraySize)

      Vyrobí instanci třídy HashTableExtLinked.

      Užití: zejména k inicializaci proměnných typu HashTableExtLinked.

      Parameters:
        `arraySize` - celková velikost pole

  - ### Method Detail

    - #### finalize

          protected void finalize()
                           throws java.lang.Throwable

      Zruší instanci třídy HashTableExtLinked.

      Užití: Přímo nepoužívejte! Volá se automaticky při destrukci.

      Overrides:
        `finalize` in class `java.lang.Object`
      Throws:
        `java.lang.Throwable` - zděděná výjimka

    - #### isEmpty

          public boolean isEmpty()

      Zjistí, zda je tabulka prázdná.
      Specified by:
        `isEmpty` in interface `Searchable`
      Returns:
        true když tabulka je prázdná, jinak false.

    - #### isFull

          public boolean isFull()

      Zjistí, zda je tabulka plná.

      Popis: stačí, aby jedna ze struktur ve store[i] byla plná, a vrací true.

      Specified by:
        `isFull` in interface `Searchable`
      Returns:
        false když žádná z vyhledávacích struktur v poli není plná, jinak true

    - #### update

          public SearchableElement update(SearchableElement elem)

      Najde a upraví prvek z tabulky, případně vloží nový prvek do tabulky.

      Popis: najde v tabulce prvek podle klíče elem.key a nahradí jej prvkem elem.

      Specified by:
        `update` in interface `Searchable`
      Parameters:
        `elem` - nový prvek, který má nahradit v tabulce prvek původní nebo který se má přidat do tabulky
      Returns:
        nahrazený prvek

    - #### insert

          public void insert(SearchableElement elem)

      Vloží prvek do tabulky.

      Vyžaduje: not isFull

      Specified by:
        `insert` in interface `Searchable`
      Parameters:
        `elem` - prvek, který se má vložit

    - #### select

          public SearchableElement select(SearchableElement key)

      Najde prvek v tabulce. Najde prvek podle klíče key. K prvnímu přiblížení použije hašovací funkci. Hašovací funkce vrátí index prvku pole, ve kterém se nachází hledaný prvek tabulky. Prvek pole obsahuje posloupnost nebo jinou vyhledávací strukturu. Každý prvek této vyhledávací struktury obsahuje jeden prvek tabulky. Jeden z prvků vyhledávací struktury tedy obsahuje hledaný prvek.
      Specified by:
        `select` in interface `Searchable`
      Parameters:
        `key` - klíč prvku, který se má najít
      Returns:
        je-li prvek v tabulce, tak nalezený prvek, jinak null

    - #### remove

          public SearchableElement remove(SearchableElement key)

      Najde a odstraní prvek z tabulky.

      Popis: Najde prvek pomocí hašovací funkce podle klíče key a odstraní jej z externě zřetězeného seznamu.

      Specified by:
        `remove` in interface `Searchable`
      Parameters:
        `key` - klíč prvku, který se má odstranit
      Returns:
        odstraněný prvek nebo null

    - #### getCount

          public int getCount()

      Zjistí počet prvků v tabulce.
      Specified by:
        `getCount` in interface `Searchable`
      Returns:
        aktuální počet prvků v tabulce

    - #### getReadable

          public void getReadable(java.util.List<java.lang.String> aStrings)

      Naplní kolekci řetězců čitelným obsahem tabulky.
      Specified by:
        `getReadable` in interface `Searchable`
      Parameters:
        `aStrings` - kolekce řetězců, která se má naplnit čitelným obsahem

    - #### getSortCounter

          public int getSortCounter()

      Description copied from interface: `Searchable`
      Provozní měření. Zjistí počet elementárních operací vyjmutí, vložení nebo záměny prvku během poslední operace sort.
      Specified by:
        `getSortCounter` in interface `Searchable`
      Returns:
        počet významných elementárních operací

    - #### getOperationCounter

          public int getOperationCounter()

      Description copied from interface: `Searchable`
      Provozní měření. Zjistí počet elementárních operací přesunu běžného prvku během poslední operace select.
      Specified by:
        `getOperationCounter` in interface `Searchable`
      Returns:
        počet významných elementárních operací