См. мой ответ .
В реальных данных это реальная проблема: множественные, несоответствующие, неполные, непоследовательные и многоязычные / регистровые форматы даты, часто смешанные свободно в один набор данных.
Нам нужно попробовать ... уловить несколько форматов datetime fmt1, fmt2, ..., fmtn и подавить / обработать исключения (из strptime()
) для всех несоответствующих (и, в частности, избегать использования yukky n-deep с отступом лестницы try..catch). См. мое решение
Мой любимый Java API является Платформой Наборов. Я использую все это время вместо того, чтобы прокрутить мои собственные реализации, и это очень приятно и просто использовать. Это состоит из нескольких полезных и взаимозаменяемых реализаций высокоэффективных структур данных и алгоритмов, а также нескольких удобных методов для обертывания дополнительной функциональности вокруг них.
Учебное руководство Josh Bloch может быть найдено здесь: http://java.sun.com/docs/books/tutorial/collections/index.html
InheritableThreadLocal
полностью!!! Именно так много возможности написать запутываемый код и барабан веревки для зависания себя просто никогда, кажется, не заканчивается.
Вспоминая о моих днях Java, сингл, большая часть забавного API для использования была java.util.concurrent, просто потому что он обеспечивает хорошо продуманные и простые в использовании стандартные блоки для параллельной обработки.
я соглашаюсь с Отражательным комментарием. безусловно самая полезная/мощная часть Java API
java.util.regex
Существуют другие пакеты, без которых я не могу жить, но regex пакет должен быть в верхнем ряду "самых больших дополнений к Java" - определенно правильный там с Наборами.
java.util.jar - Помогает с загрузкой .jar файлам в загрузчик класса для моих плагинов приложения!Мне очень нравится.
java.util очень util. Почему?
Потоки. Потоки в Java намного легче схватить и реализовать, чем их дубликаты в C++ (мнение), и обычно легко видеть, на основе названий потоков, которые идут с API, какой поток собирается сделать для Вас.
Отражение. Часть его находится в java.lang.reflect и некоторых в java.lang (главным образом Класс и ClassLoder).
javax.naming
http://java.sun.com/javase/6/docs/api/javax/naming/package-summary.html
Java является большой системной интеграцией techonolgy из-за ее мобильности, и JNDI делает хорошее задание абстракции далеко сложностей получения первого контакта с удаленной системой.
Определенно Платформа Наборов. Это используется все время, делаете ли Вы серверный Java или сторону клиента, графическую или нет. Это просто в использовании. Большинство классов структуры данных имеет и недженерик и универсальную версию (лучше всего для использования второго, но существует унаследованный код, который использует в большой степени первое), но они в значительной степени идентичны с точки зрения API кроме параметров класса. В.NET эти две версии могут иметь различные имена/API, и это может стать очень сбивающим с толку. Я также как то, как Платформа Наборов Java имеет алгоритмы как статические методы (например, Collections.sort(collectionVar)), а не как методы экземпляра. В.NET они используют методы экземпляра и по некоторым причинам, не, каждая структура данных имеет вид... Платформа Наборов также очень богата, и можно найти и простые и специализированные структуры данных (например, LinkedHashMap, который сохраняет порядок вставки).
Одна оборотная сторона, которую я услышал, - то, что платформа не работает хорошо, и некоторые люди пишут свое собственное. Я не могу проверить его, поскольку я не имею дело с критическим по отношению к производительности материалом.
java.util.concurrent очень важен для моей жизни. Мы делаем довольно большое многоядерное программирование и идея попытаться реализовать все наши задачи с помощью необработанных Потоков старого стиля просто заставляет меня чувствовать себя больным.
Хорошим примером того, где пакет параллелизма действительно делают наши жизни легче, является пул специализированных структур данных, которые он обеспечивает. Моим любимым является CopyOnWriteArrayList. Мы используем довольно много в ситуациях, где задача дисплея читает из кэша данных для обновления экрана, в то время как другая задача берет информацию из сети для обновления кэша. Обычно, это было бы приглашением для коллизий, ConcurrentModificationExceptions и подобных ужасов. Используя CopyOnWriteArrayList, задача записи создаст новую копию данных, если это должно добавить данные, таким образом гарантировав, что у читателя всегда будет допустимое (хотя потенциально устаревшим) набором данных для отображения.
Поскольку javadoc говорит,
Это является обычно слишком дорогостоящим, но может быть более эффективным, чем альтернативы, когда пересекающиеся операции значительно превосходят численностью мутации, и полезно, когда Вы не можете или не хотеть синхронизировать обходы, все же должен устранить интерференцию среди параллельных потоков.
Java устраняет целые классы ошибок, которые я обычно представлял бы для решения этой проблемы, позволяя мне сфокусироваться на фактических проблемах, которые я должен решить.
Я - огромный поклонник JPA в Java EE. Это уменьшило объем работы, который я должен сделать для обоих крупных приложений (который использовал бы EJBs), и небольшие приложения.
Вторым является JAAS, безопасность API, вот ссылка для Java SE JAAS: http://java.sun.com/javase/technologies/security/
Моя любимая часть API определенно java.lang. Этому назвали этот класс String
, который позволяет Вам легко управлять массивами символов. Любой программист, который серьезно относится к написанию хорошего кода Java, должен проверить его.