Почему нет прямой реализации пакета Bag в java collection framework?

Я не могу понять, почему JCF (Java Collection Framework) не имеет реализации Bag (чтобы дублировать и не поддерживать порядок). Эффективность сумм будет намного лучше, чем текущие реализации Collection в JCF.

  • Я знаю, как реализовать Bag в java.
  • Я знаю, что в общей версии Apache есть коллекция Bag.
  • Я знаю, что могу использовать любую реализацию в качестве мешка! но в других реализациях так много работы по сравнению с Bag.

Почему структура Java Collections не предоставляет прямые реализации, подобные этому?

Ответы

Ответ 1

Проводя свой комментарий как ответ, так как он лучше отвечает на этот вопрос.

Из отчета об ошибке, представленного здесь:

Не хватает энтузиазма у сопровождающих Структура коллекции для разработки и реализации этих интерфейсов/классов. Я лично не могу вспомнить, что он нужен. Скорее всего, что популярный пакет, разработанный вне JDK, будет импортирован в JDK, доказав свою ценность в реальном мире.

Необходимость поддержки пакетов теперь действительна.

Guava поддерживает его. Также GS-Collections.

Ответ 2

В настоящее время сумка нарушает договор о коллекциях. Многие методы противоречат текущим правилам коллекций.

"Сумка - это коллекция, которая подсчитывает количество раз, когда объект появляется в коллекции. Предположим, у вас есть сумка, содержащая {a, a, b, c}. Вызов getCount(Object) on a будет возвращать 2, а вызов uniqueSet() будет return {a, b, c}.

Обратите внимание, что этот интерфейс нарушает договор Коллекции. Поведение, указанное во многих из этих методов, отличается от поведения, указанного в Collection. Несогласованные методы четко обозначены знаком "(Нарушение)" в сводной строке. В будущей версии этого класса будет указано то же поведение, что и Collection, который, к сожалению, будет разорвать назад совместимость с этой версией ".

 boolean add(java.lang.Object o)
      (Violation) Add the given object to the bag and keep a count.

 boolean removeAll(java.util.Collection c)
      (Violation) Remove all elements represented in the given collection, respecting cardinality.

См. ссылку для получения дополнительной информации: ЗДЕСЬ

Ответ 3

JDK пытается предоставить вам реализацию общих структур данных и позволяет реализовать что-либо, если общие структуры не будут использовать вашу цель. Возможно, они думали, что это не общая структура данных. Из практичности они не могут реализовать каждую структуру данных или удовлетворить все требования. То, что вы считаете общим, не может быть общим для большинства.