`
韩悠悠
  • 浏览: 841928 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Commons Collections - Bag组

阅读更多

先来看Bag组。

 

Bag

HashBag

BagUtils

 

Bag是在org.apache.commons.collections包中定义的接口,它extends java.util.Collection,而它的实现类都被放在下面的bag包中。之所以有这样一组类型,是因为我们有时候需要在Collection中存放多个相同对象的拷贝,并且需要很方便的取得该对象拷贝的个数。需要注意的一点是它虽然extends Collection,但是如果真把它完全当作java.util.Collection来用会遇到语义上的问题,详细信息参考Javadoc

 

HashBagBag接口的一个标准实现。而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,实际应用不建议像这样硬编码。

分享到:
评论

相关推荐

    commons-collections-3.2.2-bin.zip

    《Apache Commons Collections 3.2.2:Java开发的强大工具》 Apache Commons Collections,简称Collections,是Apache软件基金会提供的一款开源Java库,它为Java集合框架提供了大量的实用工具类和扩展功能。在Java...

    commons-collections-3.2.2-bin.tar包

    1. **数据结构增强**:除了Java标准库中的List、Set、Map等,Collections库还提供了如Bag(多值集合)、BidiMap(双向映射)、MultiMap(多值映射)等特殊用途的数据结构,以满足更复杂的需求。 2. **转换和工厂...

    commons-collections-3.2.1.jar

    《Apache Commons Collections 3.2.1:Java集合框架的强大扩展》 Apache Commons Collections是Apache软件基金会的一个项目,它提供了一系列强大的、用于处理Java集合框架的工具类和算法。在这个项目中,`commons-...

    commons.collections-3.2.1和commons-beanutils-1.9.2和commons.collections-3.2.1

    Commons Collections和Apache BeanUtils是Java开发中常用的两个库,它们为开发者提供了丰富的工具类和功能,使得处理集合对象和Bean属性变得更加便捷。这两个库在Java Web开发中扮演着重要角色,尤其是在构建MVC框架...

    commons-collections-3.2.jar

    《Apache Commons Collections详解》 Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一...

    commons-collections-3.2.2.jar

    apache-common系列中的重要的成员:apache-common-collections。包中对Java中的集合类进行了一定的补充,定义了一些全新的集合,当然也是实现了Collection接口的,比如Bag,BidiMap。同时拥有新版本的原有集合,比如...

    commons-collections4-4.1.jar

    2. **Bag接口**:在Java标准库中没有提供类似的数据结构,但Commons Collections提供了Bag接口,它类似于Set,但允许元素有多个副本。这在需要统计元素出现次数的场景中非常有用。 3. **Transformer接口**:...

    commons-collections4-4.4-bin.zip

    除了标准的Java集合实现,如ArrayList和HashMap,Commons Collections还提供了其他有用的实现,如`BoundedList`(限制大小的列表)、`Bag`(支持多重计数的集合)和`MultiMap`(一个键可以对应多个值的映射)。...

    commons-collections-3.2源码包

    《Apache Commons Collections 3.2源码解析》 Apache Commons Collections是Java开发中不可或缺的工具库,它极大地扩展了Java的内置集合框架,为开发者提供了更丰富的数据结构和算法实现。这个源码包,名为"commons...

    commons-collections-3.2.1-src.zip

    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

    标题和描述中提到的"commons-beanutils-1.8.3.jar", "commons-codec-1.7.jar", "commons-collections-3.2.1.jar"是Apache Commons项目中的三个不同组件的JAR文件,这些文件在Java开发中被广泛使用。Apache Commons是...

    commons-collections所有版本(1.0-3.2.1).zip

    Apache Commons Collections是一个非常重要的Java库,它为Java的集合框架提供了大量的扩展和增强。这个压缩包文件包含了从1.0到3.2.1的所有版本,涵盖了从早期JDK到现代Java版本的广泛支持,这使得开发者可以在不同...

    aduna-commons-collections-2.2.jar.zip

    Aduna Commons Collections提供了一些Bag的实现,如HashBag和TreeBag,这在处理统计需求时非常有用。 7. **MapUtils和ListUtils**:这两个工具类提供了大量静态方法,方便开发者对Map和List进行操作,如创建默认Map...

    commons-collections4-4.0.rar

    Apache Commons Collections还包括了一些高级数据结构,如`Bag`(多重集)、`MultiMap`(多值映射)和`QueueDecorator`(队列装饰器)。`Bag`允许元素出现多次,而不仅仅是唯一;`MultiMap`的每个键可以关联多个值,...

    commons-collections4-4.0

    Apache Commons Collections是一个非常重要的Java库,它为Java集合框架提供了大量的扩展和实用工具。这个库被称为"commons-collections4-4.0",表明它是Apache Commons Collections的第4个主要版本,版本号为4.0。这...

    commons-collections-3.1.zip

    2. `org.apache.commons.collections.bag`:实现了多值集合(Bag)的概念,允许元素的重复,提供了带权重的多值集合实现,如HashBag和TreeBag。 3. `org.apache.commons.collections.buffer`:提供了一组数据缓冲区...

    Apache commons-collections4-4.1 Src压缩包

    Apache Commons Collections是一个强大的Java库,它是Apache软件基金会的一部分,专门用于增强Java的集合框架。这个库提供了大量的实用工具类和算法,扩展了Java标准库中集合接口的功能,使得开发人员可以更加高效、...

    aduna-commons-collections-2.6.0.jar.zip

    7. **数据结构**:除了基本的List、Set、Map等,Aduna Commons Collections还引入了如MultiMap、Bag等数据结构,这些数据结构在处理多值关联、计数等特定问题时非常有用。 8. **序列化**:库中的许多集合类都实现了...

Global site tag (gtag.js) - Google Analytics