Если метод должен возвращать SortedSet, это должен быть тип возврата метода. Вызывающие абоненты могут присваивать результат SortedSet или Set, в зависимости от того, заботятся ли они о порядке или нет.
если ваш метод javadoc или name подразумевает, что вы возвращаете отсортированный набор, но типом возвращаемого вами метода является только Set, это все равно, что сказать своему сантехнику, что вы заплатите ему 100 долларов за его услуги, а затем написать в контракте, что вы заплатите ему " не менее 50 долларов США.
Возвращая SortedSet
1) вы обещаете своим клиентам, что вы и будете возвращать отсортированный набор. вы не можете изменить этот контракт (установить), не нарушая код вашего клиента (не будет компилироваться).
Если вместо этого тип возвращаемого вами метода установлен, то не имеет значения, что вы обещаете своим клиентам / абонентам в своем javadoc или в имени метода, вы все равно можете изменить реализацию в любое время, чтобы вернуть несортированный набор. Если тип возвращаемого значения установлен, и вызывающая сторона хочет возможности SortedSet, они могут привести возвращенное значение к SortedSet (некрасиво), но затем однажды, если вы решите, что просто собираетесь вернуть несортированный (все еще) набор, ваш код вызывающих программ будет прерываться во время выполнения (очень рискованно для ваших клиентов. представьте, что код ваших клиентов работает нормально, а затем они обновляют предоставленную вами библиотеку ...).
2) звонящим может понадобиться отсортированный набор вашего результата. Если вы возвращаете Set, у них может возникнуть соблазн пересортировать ваш результат (хотите ли вы, чтобы он читал ваш Javadoc?). Если вы возвращаете SortedSet, они знают, что им не нужно повторно сортировать.