И все же, почему String? Почему не char[] или не Reader? Ведь, по сути, вы свели весь функционал String-а к хранению массива символов.
В целом, «правильным» было бы реализовать подкласс FilterReader и фильтровать символы в нем. Оно будет медленнее C-style решения, но универсальней. Понятно, что все зависит от задачи и выбранной архитектуры.
Возможно, будет еще немного быстрее, если не копировать массив символов (getChars на самом деле вызвает System.arraycopy), а использовать String.charAt()
Еще быстрее нужно — меняйте архитектуру. Почему у вас передаются строки, а не массивы символов? Или хотя бы Stream-ы.
Ну вот этот вот «вызов API» — это, по моему мнению, лишний код. Если объект просто «вызывает API», то этот самый вызов лучше из объекта вынести в специальный сервис.
Это бывает полезно, если данные передаются между разными уровнями. Например, на веб-уровне элемент можно отрендерить, а на db-уровне его можно сохранить. Альтернативой будет написание всех методов типа render(), save(), load() и т.д. у каждого объекта, либо использование разных объектов на разных уровнях.
ну хотя бы потому, что вариантов реализации метода print() может быть несколько. например, понадобилось сделать печать не на экран, а на принтер — и что, теперь у всех классов переписывать print()?
Сравнивать возможные варианты реализации кода — можно и нужно. Знания об абстрактной сложности пузырьковой сортировки — избыточные знания. Гораздо лучше знать, например, что для одних случаев нужно выбрать один метод, в других случаях — другой, и будет ли данный алгоритм эффективен на текущей платформе с текущими данными, можно ли его легко расширить на кластер из 1000 машин, ну и так далее.
Само по себе знание O() бесполезно без практического опыта.
А сколько же на самом деле занимет 1 cloudlet? Деплою простенькое приложение на Tomcat 6, показывает Cloudlets 2/1, при наведении мышкой пишет «129 Mb». Почему занято 2 cloudlet-а, вы же писали, что 1 cloudlet = 256Mb?
лично я сабмитил баг-репорты в различные проекты, поднимал на форумах вопросы и таки добивался фикса багов. очевидно, что «поднимать шум» можно по-разному, можно на хабре излить душу, а можно аргументированно доказать свою точку зрения разработчикам.
согласен в одном — в некоторых случаях менее затратно самому все сделать, чем день за днем писать на форумы/багтрекеры.
первым делом начинал твикать всё, что «сломали» разработчики
Кстати да, вот это очень бесит, у меня за последние 3 года пользования убунтой уже накопился приличный список, типа — вернуть иконки на заголовках окон вправо, удалить gwibber, emphaty и evolution (и поставить hotot, pidgin и thunderbird), хорошо что в 11.04 можно вернуться на классический гном. Предвижу, что для следующих версий придется добавить в список «заменить Gnome 3 на 2».
Единственная надежда на то, что через пару лет Gnome 3 все же допилят и им станет можно пользоваться в работе. Вспоминаю, на убунтах 8 и 9 всегда удалял PulseAudio из-за постоянных глюков и пропаданий звука. Сейчас же он практически незаметен, даже скайп стал нормально с PulseAudio работать.
Значит ли это, что те, кто молча удаляет все эти Unity/Gnome Shell и прочие «иконки слева» при каждом обновлении дистра, не лемминги? :)
С нуля ставить — это как раз понятно, при обновлении иногда что-то отваливается.
Вот и приходится выбирать — либо, матерясь, выпиливать все эти «мега-решения» при выходе нового дистра, либо, так же (если не хуже) матерясь, заниматься глюками, возникшими при обновлении.
На работе у меня до сих пор 9 версия убунты стоит, ибо нет пары дней на «допиливание» новых версий. Дома можно экспериментировать, но лично я лучше займусь Java, чем потрачу 2-3 дня на приведение в порядок нового Гнома.
Перечитал текст несколько раз, все равно не понял, как вычисляется Z-функция за линейное время и почему именно так.
В википедии есть через рекуррентное соотношение, но не ясно, почему именно так.
Если не трудно, можно пару примеров?
От себя добавлю, есть еще вариант поиска через сдвигающееся окно. Это когда для строки, которую нужно найти, вычисляется некая функция (пусть для примера это будет сумма всех символов), далее вычисляется эта же функция для начала строки такой же длины. Если функции совпали, проводится посимвольное сравнение. Если нет совпадения, то «окно» сдвигается на 1 позицию: из суммы вычитается значение символа, оставшегося за границей окна, и прибавляется значение нового символа.
Правда, не знаю, зачем это может понадобится, если сложность других алгоритмов линейна :)
Правильно ответил на 2 вопроса. Еще раз убедился, что нужно писать код максимально просто и понятно, а за подобные извращения жестко бить по рукам. :-)
И все же, почему String? Почему не char[] или не Reader? Ведь, по сути, вы свели весь функционал String-а к хранению массива символов.
В целом, «правильным» было бы реализовать подкласс FilterReader и фильтровать символы в нем. Оно будет медленнее C-style решения, но универсальней. Понятно, что все зависит от задачи и выбранной архитектуры.
Еще быстрее нужно — меняйте архитектуру. Почему у вас передаются строки, а не массивы символов? Или хотя бы Stream-ы.
То, что == сравнивает ссылки на объект — это азы. Строки — это объекты. Сравнивать строки через == нельзя. Вот и вся логика.
Это бывает полезно, если данные передаются между разными уровнями. Например, на веб-уровне элемент можно отрендерить, а на db-уровне его можно сохранить. Альтернативой будет написание всех методов типа render(), save(), load() и т.д. у каждого объекта, либо использование разных объектов на разных уровнях.
Само по себе знание O() бесполезно без практического опыта.
согласен в одном — в некоторых случаях менее затратно самому все сделать, чем день за днем писать на форумы/багтрекеры.
Кстати да, вот это очень бесит, у меня за последние 3 года пользования убунтой уже накопился приличный список, типа — вернуть иконки на заголовках окон вправо, удалить gwibber, emphaty и evolution (и поставить hotot, pidgin и thunderbird), хорошо что в 11.04 можно вернуться на классический гном. Предвижу, что для следующих версий придется добавить в список «заменить Gnome 3 на 2».
Единственная надежда на то, что через пару лет Gnome 3 все же допилят и им станет можно пользоваться в работе. Вспоминаю, на убунтах 8 и 9 всегда удалял PulseAudio из-за постоянных глюков и пропаданий звука. Сейчас же он практически незаметен, даже скайп стал нормально с PulseAudio работать.
С нуля ставить — это как раз понятно, при обновлении иногда что-то отваливается.
Вот и приходится выбирать — либо, матерясь, выпиливать все эти «мега-решения» при выходе нового дистра, либо, так же (если не хуже) матерясь, заниматься глюками, возникшими при обновлении.
На работе у меня до сих пор 9 версия убунты стоит, ибо нет пары дней на «допиливание» новых версий. Дома можно экспериментировать, но лично я лучше займусь Java, чем потрачу 2-3 дня на приведение в порядок нового Гнома.
В википедии есть через рекуррентное соотношение, но не ясно, почему именно так.
Если не трудно, можно пару примеров?
От себя добавлю, есть еще вариант поиска через сдвигающееся окно. Это когда для строки, которую нужно найти, вычисляется некая функция (пусть для примера это будет сумма всех символов), далее вычисляется эта же функция для начала строки такой же длины. Если функции совпали, проводится посимвольное сравнение. Если нет совпадения, то «окно» сдвигается на 1 позицию: из суммы вычитается значение символа, оставшегося за границей окна, и прибавляется значение нового символа.
Правда, не знаю, зачем это может понадобится, если сложность других алгоритмов линейна :)