org.apache.commons.collections学习笔记【一】之Bag

本文介绍如何利用Apache Commons Collections包中的Bag接口及其实现类HashBag,高效地处理类仓库系统中的批量添加、删除操作以及获取当前数量等库存管理任务,通过BagUtils静态方法提供便利的Bag实例获取方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先摘抄一段Bag的说明

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

HashBag是Bag接口的一个标准实现。而BagUtils提供一组static的方法让调用者获取经过不同装饰后的Bag实例。

例子:

package bag;
 
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 price;
 
    public Book() {
         
    }
 
    public Book(String name, String isbn, double price) {
        super();
        this.name = name;
        this.isbn = isbn;
        this.price = price;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getIsbn() {
        return isbn;
    }
 
    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
 
    public double getPrice() {
        return price;
    }
 
    public void setPrice(double price) {
        this.price = price;
    }
 
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("NAME" + name).append("isbn" + isbn).append("price" + price).toString();
    }
}

package bag;

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 TestBag {
    public static void main(String[] args) {
		Book book1 = new Book("代码大全", "9787121022982", 102.40);
		Book book2 = new Book("程序员修炼之道——从小工到专家", "9787121123368", 44.00);
		Book book3 = new Book("编程珠玑(第2版)(20余年畅销不衰计算机科学的不朽经典)", "9787115179289", 29.20);
		Bag myBag = BagUtils.typedBag(new HashBag(), Book.class);
		myBag.add(book1, 1000);
		myBag.add(book2, 200);
		myBag.add(book3, 100);
		int count1 = myBag.getCount(book1);
		int count2 = myBag.getCount(book2);
		int count3 = myBag.getCount(book3);

		Double price1 = book1.getPrice();
		Double price2 = book2.getPrice();
		Double price3 = book3.getPrice();
		System.out.println(StringUtils.center("书库里还有", 40,"*"));
		System.out.println(book1.getName() + "--" + count1 + "本");
		System.out.println(book2.getName() + "--" + count2 + "本");
		System.out.println(book3.getName() + "--" + count3 + "本");
		System.out.println("共计:" + (count1 * price1 + count2 * price2 + count3 * price3) + "元");
	}
}

再摘抄段

这个Bag在我们需要处理类似仓库的系统中还是比较有用的,对于定义好的货品,可以用枚举,甚至简单点用String也是可以,然后就可以成批add和remove,并且直接获取当前数量进行盘点或者库存查询。如果没有Bag,我们需要for循环去add和remove。或者如果你实现的是一个Map,那么你在add和remove时还需要自己去判断是否已经有该货品存在,remove时甚至需要自己去检查库存是否够用等等。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值