Какая коллекция мне нужна для хранения объекта и его количества?

#java #collections

#java #Коллекции

Вопрос:

Мне нужно сохранить продукт (объект) и его количество в коллекции, где я смогу увеличить количество каждого продукта, когда это необходимо.

Какой тип коллекции будет работать и лучше всего использовать в этом случае?

Комментарии:

1. Это зависит от ваших дальнейших требований, но я бы сначала попробовал HashMap

2. Если вам нужно выполнить поиск продукта, чтобы обновить количество, затем используйте HashMap и также определите правильные значения equals и hashcode.

Ответ №1:

Я бы использовал карту, например HashMap. Ключ карты должен быть ключом продукта, а значение — количеством продукта.

Комментарии:

1. Ключом может быть сам Product объект.

Ответ №2:

Если количество — это просто количество, и если вы открыты для использования сторонней библиотеки, вы можете использовать a Bag из коллекций Eclipse. A Bag — это a Collection , который неупорядочен и допускает дублирование. Внутренне a HashBag обычно реализуется с помощью a HashMap , с ключами, связанными с их количеством. В случае HashBag с коллекциями Eclipse резервным хранилищем является ObjectIntHashMap . Преимущество этого заключается в том, что не нужно упаковывать и распаковывать Integer объекты, как вы могли бы, если вы сопоставляете ключи с их количеством в a java.util.HashMap .

 Product product1 = Product.of("abc");
Product product2 = Product.of("xyz");

MutableBag<Product> counts = Bags.mutable.empty();

counts.addOccurrences(product1, 5);
counts.addOccurrences(product2, 10);

Assert.assertEquals(5, counts.occurrencesOf(product1));
Assert.assertEquals(10, counts.occurrencesOf(product2));
  

Вот блог, который описывает Bag более подробно.

Примечание: я являюсь коммиттером для коллекций Eclipse