#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