3.8.1. Reprezentace seznamem

Pro uložení klíčů a hodnot můžeme použít dva samostatné seznamy nebo můžeme vytvořit třídu reprezentující uspořádanou dvojici objektů a tyto dvojice (klíč, hodnota) ukládat do jediného seznamu. V následujícím příkladu si ukážeme implementaci pomocí dvou seznamů.

Příklad 3.18.
Implementujte vyhledávací tabulku pomocí dvou seznamů obsahujících klíče a k nim přidružené hodnoty.

Budeme vycházet z toho, že klíče a jim příslušející hodnoty jsou uloženy sice v různých seznamech, ale na stejných indexech. Konstruktor této tabulky získá jako parametr počáteční kapacitu tabulky. Jako seznam budeme používat třídu ArrayList, která zajistí konstantní čas přístupu k prvkům na zadaném indexu.

class ArrayMap implements Map { 
   public ArrayMap(int capacity) { 
      keys = new ArrayList(capacity); 
      values = new ArrayList(capacity); 
   } 
 
   public Object put(Object key, Object value) { 
      int index = keys.indexOf(key); 
      if( index < 0 ) { 
         keys.add(key); 
         values.add(value); 
         return null; 
      } 
      Object oldValue = values.get(index); 
      values.set(index, value); 
      return oldValue;  
   } 
 
   public Object get(Object key) 
   { 
      int index = keys.indexOf(key); 
      if( index < 0 ) return null; 
      return values.get(index); 
   } 
 
   public Object remove(Object key) 
   { 
      int index = keys.indexOf(key); 
      if( index < 0 ) return null; 
      Object oldValue = values.get(index); 
      keys.remove(index); 
      values.remove(index); 
      return oldValue; 
   } 
 
   private ArrayList keys; 
   private ArrayList values; 
}

Kontrolní otázka: Jaká je časová složitost operací get(), put() a remove()?