Философия Java


Упражнения - часть 4


  • Добавьте поле char в CountedString, которое будет инициализироваться в конструкторе, и измените методы hashCode( ) и equals( ), чтобы они включали значение этого char.
  • Измените SimpleHashMap так, чтобы он сообщал о коллизиях, и проверьте это, добавив одни и те же данные дважды, чтобы вы могли вдеть коллизии.
  • Измените SimpleHashMap так, чтобы он сообщал число необходимых “проб” при возникновении коллизий. То есть, сколько вызовов next( ) должно быть выполнено итератором для прохода по LinkedList и поиску совпадений?
  • Реализуйте методы clear( ) и remove( ) для SimpleHashMap.
  • Реализуйте оставшуюся часть интерфейса Map для SimpleHashMap.
  • Добавьте метод private rehash( ) для SimpleHashMap, который вызывается, когда коэффициент загрузки превышает 0.75. Во время повторного хеширования удвойте число ковшей, затем выполните поиск первого простого числа большего, чем определенное новое число ковшей.
  • Следуя примеру в SimpleHashMap.java, создайте и проверьте SimpleHashSet.
  • Измените SimpleHashMap для использования ArrayList вместо LinkedList. Измените MapPerformance.java для сравнения производительности двух реализаций.
  • Используя HTML документацию JDK (доступную на java.sun.com), найдите класс HashMap. Создайте HashMap, наполните ее элементами и определите коэффициент загрузки. Проверьте скорость поиска этой карты, затем попробуйте увеличить скорость, создав новый HashMap, с большей начальной емкостью, и скопируйте старую карту в новую, запустите ваш тест проверки скорости для новой карты.
  • В Главе 8, найдите пример GreenhouseControls.java, который состоит из трех файлов. В Controller.java класс EventSet - это просто контейнер. Измените код на использование LinkedList вместо EventSet. Это потребует больше, чем простой замены EventSet на LinkedList; вы также должны использовать Iterator для прохода по множеству событий.
  • (Сомнения). Напишите ваш собственный класс карты, подстроенный для определенного типа ключа: например, String. Не наследуйте его от Map. Вместо этого, дублируйте методы, чтобы методы put( ) и get( ) принимал только объекты String в качестве ключей, а не Object. Все, что затрагивает ключи, не должно использовать общий тип, а вместо этого работать со String, для предотвращения затрат на приведение и обратное приведение. Ваша цель в создании максимально быстрой реализации. Измените MapPerformance.java для проверки вашей реализации с HashMap.
  • (Сомнения). Найдите исходный код для List в исходном коде библиотеки Java, которая поставляется со всеми дистрибутивами Java. Скопируйте этот код и сделайте специальную версию, назвав ее intList, которая содержит только int. Рассмотрите что нужно сделать для создания специальных версии списков для всех примитивных типов. Теперь рассмотрите что случится, если вы захотите создать связанный список, который работает со всеми примитивными типами. Если бы параметризованные типы уже были бы реализованы в Java, они обеспечивали бы способ выполнить эту работу за вас автоматически (как и многие другие полезные действия).



  • Начало  Назад  Вперед



    Книжный магазин