先来看Bag组。
Bag
HashBag
BagUtils
Bag是在org.apache.commons.collections包中定义的接口,它extends java.util.Collection,而它的实现类都被放在下面的bag包中。之所以有这样一组类型,是因为我们有时候需要在Collection中存放多个相同对象的拷贝,并且需要很方便的取得该对象拷贝的个数。需要注意的一点是它虽然extends Collection,但是如果真把它完全当作java.util.Collection来用会遇到语义上的问题,详细信息参考Javadoc。
HashBag是Bag接口的一个标准实现。而BagUtils提供一组static的方法让调用者获取经过不同装饰后的Bag实例。
还是举例子来看:
/** Book.java */
package sean.study.commons.collections;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class Book {
private String name;
private String isbn;
private double retailPrice;
public Book() {
}
public Book(String name, String isbn, double retailPrice) {
this.name = name;
this.isbn = isbn;
this.retailPrice = retailPrice;
}
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("name", name)
.append("ISBN", isbn)
.append("retailPrice", retailPrice)
.toString();
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getRetailPrice() {
return retailPrice;
}
public void setRetailPrice(double retailPrice) {
this.retailPrice = retailPrice;
}
}
/** BagUsage.java */
package sean.study.commons.collections;
import org.apache.commons.collections.Bag;
import org.apache.commons.collections.BagUtils;
import org.apache.commons.collections.bag.HashBag;
import org.apache.commons.lang.StringUtils;
public class BagUsage {
public static void main(String[] args) {
demoBagUsage();
}
public static void demoBagUsage() {
System.out.println(StringUtils.center(" demoBagUsage ", 40, "="));
// data setup
Book book1 = new Book("Refactoring Workbook", "7-5083-2208-8", 29.8);
Book book2 = new Book("J2EE Design Patterns", "7-5083-3099-4", 45);
Book book3 = new Book("Agile Software Development", "7-5083-1503-0", 59);
// create a bag
Bag myBag = BagUtils.typedBag(new HashBag(), Book.class);
myBag.add(book1, 360);
myBag.add(book2, 500);
myBag.add(book3, 170);
// calculations for a bag
double price1 = book1.getRetailPrice();
double price2 = book2.getRetailPrice();
double price3 = book3.getRetailPrice();
int book1Count = myBag.getCount(book1);
int book2Count = myBag.getCount(book2);
int book3Count = myBag.getCount(book3);
double totalValue = (price1 * book1Count) + (price2 * book2Count)
+ (price3 * book3Count);
// dispaly results
System.out.println("There are " + book1Count + " copies of "
+ book1.getName() + ".");
System.out.println("There are " + book2Count + " copies of "
+ book2.getName() + ".");
System.out.println("There are " + book3Count + " copies of "
+ book3.getName() + ".");
System.out.println("The total value of these books is: " + totalValue);
System.out.println();
}
}
以下是运行结果:
============= demoBagUsage =============
There are 360 copies of Refactoring Workbook.
There are 500 copies of J2EE Design Patterns.
There are 170 copies of Agile Software Development.
The total value of these books is: 43258.0
需要说明的是,以上的代码仅仅为了演示如何使用Bag,实际应用不建议像这样硬编码。
相关推荐
《Apache Commons Collections 3.2.2:Java开发的强大工具》 Apache Commons Collections,简称Collections,是Apache软件基金会提供的一款开源Java库,它为Java集合框架提供了大量的实用工具类和扩展功能。在Java...
1. **数据结构增强**:除了Java标准库中的List、Set、Map等,Collections库还提供了如Bag(多值集合)、BidiMap(双向映射)、MultiMap(多值映射)等特殊用途的数据结构,以满足更复杂的需求。 2. **转换和工厂...
《Apache Commons Collections 3.2.1:Java集合框架的强大扩展》 Apache Commons Collections是Apache软件基金会的一个项目,它提供了一系列强大的、用于处理Java集合框架的工具类和算法。在这个项目中,`commons-...
Commons Collections和Apache BeanUtils是Java开发中常用的两个库,它们为开发者提供了丰富的工具类和功能,使得处理集合对象和Bean属性变得更加便捷。这两个库在Java Web开发中扮演着重要角色,尤其是在构建MVC框架...
《Apache Commons Collections详解》 Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一...
apache-common系列中的重要的成员:apache-common-collections。包中对Java中的集合类进行了一定的补充,定义了一些全新的集合,当然也是实现了Collection接口的,比如Bag,BidiMap。同时拥有新版本的原有集合,比如...
2. **Bag接口**:在Java标准库中没有提供类似的数据结构,但Commons Collections提供了Bag接口,它类似于Set,但允许元素有多个副本。这在需要统计元素出现次数的场景中非常有用。 3. **Transformer接口**:...
除了标准的Java集合实现,如ArrayList和HashMap,Commons Collections还提供了其他有用的实现,如`BoundedList`(限制大小的列表)、`Bag`(支持多重计数的集合)和`MultiMap`(一个键可以对应多个值的映射)。...
《Apache Commons Collections 3.2源码解析》 Apache Commons Collections是Java开发中不可或缺的工具库,它极大地扩展了Java的内置集合框架,为开发者提供了更丰富的数据结构和算法实现。这个源码包,名为"commons...
Apache Commons Collections 包含多个模块,如 Bag、BidiMap、Buffer、Comparator、Functor、Iterator、Map、Multimap、Set、TransformedMap、TypeConverter 等。这些模块提供了丰富的接口和实现,使得开发者能够...
标题和描述中提到的"commons-beanutils-1.8.3.jar", "commons-codec-1.7.jar", "commons-collections-3.2.1.jar"是Apache Commons项目中的三个不同组件的JAR文件,这些文件在Java开发中被广泛使用。Apache Commons是...
Apache Commons Collections是一个非常重要的Java库,它为Java的集合框架提供了大量的扩展和增强。这个压缩包文件包含了从1.0到3.2.1的所有版本,涵盖了从早期JDK到现代Java版本的广泛支持,这使得开发者可以在不同...
Aduna Commons Collections提供了一些Bag的实现,如HashBag和TreeBag,这在处理统计需求时非常有用。 7. **MapUtils和ListUtils**:这两个工具类提供了大量静态方法,方便开发者对Map和List进行操作,如创建默认Map...
Apache Commons Collections还包括了一些高级数据结构,如`Bag`(多重集)、`MultiMap`(多值映射)和`QueueDecorator`(队列装饰器)。`Bag`允许元素出现多次,而不仅仅是唯一;`MultiMap`的每个键可以关联多个值,...
Apache Commons Collections是一个非常重要的Java库,它为Java集合框架提供了大量的扩展和实用工具。这个库被称为"commons-collections4-4.0",表明它是Apache Commons Collections的第4个主要版本,版本号为4.0。这...
2. `org.apache.commons.collections.bag`:实现了多值集合(Bag)的概念,允许元素的重复,提供了带权重的多值集合实现,如HashBag和TreeBag。 3. `org.apache.commons.collections.buffer`:提供了一组数据缓冲区...
Apache Commons Collections是一个强大的Java库,它是Apache软件基金会的一部分,专门用于增强Java的集合框架。这个库提供了大量的实用工具类和算法,扩展了Java标准库中集合接口的功能,使得开发人员可以更加高效、...
7. **数据结构**:除了基本的List、Set、Map等,Aduna Commons Collections还引入了如MultiMap、Bag等数据结构,这些数据结构在处理多值关联、计数等特定问题时非常有用。 8. **序列化**:库中的许多集合类都实现了...