数据结构-背包

背包

背包是不支持从中删除元素的集合数据类型。
存在的目的是帮助调用者收集元素,并遍历之。

接口设计

// 向背包中添加元素
public void add(Item element);

// 返回背包有效大小
public int size();

// return 迭代器
public Iterator<Item> iterator();

分析与要求

1 支持泛型

2 动态大小

3 支持迭代(Foreach)

实现

public class Bag<Item> implements Iterable<Item> { //实现此接口,对象可迭代,使用foreach等

    private Item[] data;//存放数据的数组
    private int idx = 0;//记录有效元素界限的指针

    /** @param initSize 背包的初始大小 */
    public Bag(int initSize) {
        data = (Item[]) new Object[initSize];//初始化数组
    }

    /** 返回迭代器 */
    public Iterator<Item> iterator() {
        return new Iterator<Item>() {
            private int index = 0;//迭代进度标记
            public boolean hasNext() { return index < idx; }
            public Item next() { return index < idx ? data[index++] : null; }
            public void remove() { }
        };
    }
    /** 向背包中添加元素 */
    public void add(Item element) {
        if (idx == data.length) resize(data.length * 2);
        data[idx++] = element;
    }

    /** 扩展数组大小(新建一个更大的数组,并将元素迁移过去)  */
    private void resize(int newSize) {
        Item[] temp = (Item[]) new Object[newSize];
        for (int i = 0; i < data.length; i++) {
            temp[i] = data[i];
        }
        data = temp;
    }

    /** @return 返回背包有效大小 */
    public int size() { return idx; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值