Почему Google построил все это, когда вместо этого мог попытаться улучшить Коллекции Apache Commons?
Коллекции Apache Commons очень явно не соответствовали нашим потребностям. Он не использует обобщений, что является проблемой для нас, так как мы ненавидим получать предупреждения компиляции из нашего кода. Это также было в "образце ожидания" в течение долгого времени. Мы могли видеть, что от нас потребуется довольно значительные инвестиции, чтобы исправить это, пока мы не будем рады его использовать, а тем временем наша собственная библиотека уже органически росла.
Важным отличием библиотеки Apache от нашей является то, что наши коллекции очень точно придерживаются контрактов, определенных интерфейсами JDK, которые они реализуют. Если вы просмотрите документацию Apache, вы найдете бесчисленные примеры нарушений. Они заслуживают похвалы за столь четкое указание на них, но все же отклоняться от стандартного поведения при сборе рискованно! Вы должны быть осторожны, что вы делаете с такой коллекцией; ошибки всегда просто ждут, чтобы случиться.
Наши коллекции полностью обобщены и никогда не нарушают свои контракты (за единичными исключениями, когда реализации JDK создали сильный прецедент для допустимых нарушений). Это означает, что вы можете передать одну из наших коллекций любому методу, который ожидает коллекцию, и можете быть уверены, что все будет работать именно так, как должно.