重新学习数据结构
背包:一种不支持删除元素的数据集合,主要用来收集元素,迭代遍历且迭代顺序无序
定义背包
public class Bag<E> implements Iterable<E>{ private E[] table; private int bagSize; private static int DEFAULT_CAPACITY = 10; public Bag(){ ensureCapacity(DEFAULT_CAPACITY); } public Bag(int capacity){ ensureCapacity(capacity); } boolean add(E element){ if(element == null){ return false; } if(table.length == bagSize){ ensureCapacity(2*DEFAULT_CAPACITY); } table[bagSize] = element; bagSize++; return true; } boolean isEmpty(){ return bagSize == 0; } int size(){ return bagSize; } private void ensureCapacity(int newCapacity){ E[] newTable = (E[]) new Object[newCapacity]; for(int i=0; i<table.length;i++){ newTable[i] = table[i]; } table = newTable; } public Iterator<E> iterator() { return null; } private class DeIterator<E> implements Iterator<E>{ private int currentSize ; public boolean hasNext() { return currentSize < bagSize; } public E next() { if(!hasNext()){ throw new NoSuchElementException(); } return (E)table[currentSize++]; } public void remove() { } } }
例子
public class BagTest { public static void main(String[] args){ Bag<Double> numbers = new Bag<Double>(); //初始化numbers for(int i= 0;i< 10;i++){ numbers.add(Double.valueOf(i)); } //打印长度 System.out.println("bag size is: "+numbers.size()); //求和 double x = 0.0; Iterator<Double> lt = numbers.iterator(); while(lt.hasNext()){ x += lt.next(); } System.out.println("bag sum is: "+x); //求平均 double mean = x/numbers.size(); System.out.println("mean is: "+mean); } }