2016-11-28 5 views
0

Так что я пытаюсь создать класс типа данных, который имеет разные конфигурации в зависимости от размера списка, указанного в основном. Это тип данных для списков домов, и идея заключается в том, что если количество домов (размер) больше 1000, я бы использовал тип данных, называемый SmartULS, с использованием дерева или дерева AVL.Создание класса типа данных, который имеет разные реализации в зависимости от размера данного списка в Java

С другой стороны, если оно меньше 1000, пусть оно будет реализовано с использованием хеш-таблицы. Идея состоит в том, чтобы ускорить сортировку/получение/установку/удаление в зависимости от размера указанного списка.

Я работал на это до сих пор, но это не работает:

public class houseListings<K,V> { 

    protected TreeMap<K,V> tree = new TreeMap<>(); 
    protected AbstractHashMap<K,V> hashMap = new AbstractHashMap<K,V>(); 

    public void setHouseListings(size){ 
     int threshold = 1000; 
     if (size >= threshold) { 
      map = new AbtractMap<K,V>(); 
     } 
     else 
      map = new TreeMap<K,V>(); 

    } 
} 
+0

Внесите свой код во что-то, что можно запустить, и обновите свой вопрос. –

+0

Какая ошибка? Кроме того, в качестве примечания, я думаю, что есть опечатка в строке 'map = new AbtractMap ();' –

ответ

0

Я думаю, что причина ее не работает, потому что

  1. У вас есть опечатки в коде
  2. You используют неправильные типы (например, AbstractHashMap). Вы должны использовать HashMap и TreeMap

Теперь, приходя в идеальный способ выбора различных «стратегий» вам следует рассмотреть вопрос об использовании strategy design pattern. Я собрал код, который поможет вам визуализировать его.

public static void main(String... args) { 

     //... some code that reads/calculates threshold 

     DataVolumneStrategy strategy; 
     if (threshold >= 1000) { 
      strategy = new HighVolumeStrategy(); 
     } else { 
      strategy = new NormalStrategy(); 
     } 

     //use map 
     strategy.getMap(); 

    } 

    interface DataVolumneStrategy { 

     Map<K, V> getMap(); 

    } 

    static class NormalStrategy implements DataVolumneStrategy{ 

     @Override 
     public Map<K, V> getMap() { 
      return new HashMap<>(); 
     } 
    } 

    static class HighVolumeStrategy implements DataVolumneStrategy { 

     @Override 
     public Map<K, V> getMap() { 
      return new TreeMap<>(); 
     } 
    } 

Надеюсь, это поможет.

+0

Как насчет методов, таких как get/set/remove и т. Д., Которые я буду использовать внутри DataVolumeStrategy? Я просто использую оператор if внутри этих методов для решения этой проблемы? – lesterpierson123

+0

@ lesterpierson123 Вы ссылаетесь на методы 'get',' put' возвращенной «Карты»? Если да, эта стратегия предназначена только для того, чтобы получить подходящую реализацию интерфейса «Карта» в соответствии с вашими потребностями. После этого вы можете использовать его так, как хотите, в своем основном методе. Если нет, можете ли вы уточнить свой вопрос. –

 Смежные вопросы

  • Нет связанных вопросов^_^