算法第四版 练习 1.3.34

来源:互联网 发布:仙侠世界cos捏脸数据 编辑:程序博客网 时间:2024/06/06 02:19

RandomBag.java

import java.util.Iterator;import edu.princeton.cs.algs4.StdRandom;public class RandomBag<Item> implements Iterable<Item>{    private Item[] item;    private int N;    @SuppressWarnings("unchecked")    public RandomBag(int cap)    {        if (cap <= 0)            throw new RuntimeException();        item = (Item[])(new Object[cap]);    }    public boolean isEmpty()    {        return N == 0;    }    public boolean isFull()    {        return N == item.length;    }    public void resize(int n)    {        @SuppressWarnings("unchecked")        Item[] temp = (Item[])(new Object[n]);        for (int i = 0; i < N; ++i)            temp[i] = item[i];        item = temp;        }    public int size()    {        return N;    }    public void add(Item data)    {        if (isFull())            resize(2 * N);        item[N++] = data;    }    public Iterator<Item> iterator()    {        return new RandomBagIterator();    }    private class RandomBagIterator implements Iterator<Item>    {        private int current = 0;        public RandomBagIterator()        {            // i  ----- N - 1            for (int i = 0; i < N; ++i)            {                int r = i + StdRandom.uniform(N - i);                Item temp = (Item) item[i];                item[i] = item[r];                item[r] = temp;            }        }        public boolean hasNext()        {            return current != N;        }        public void remove()        {        }        public Item next()        {            return (Item) item[current++];        }    }}

测试:main.java

import edu.princeton.cs.algs4.StdOut;public class Main {    public static void main(String[] args)    {        RandomBag<Integer> rb = new RandomBag<Integer>(6);        for (int i = 0; i < 10; ++i)            rb.add(i);        for (Integer t : rb)            StdOut.print(t + " ");    }}
原创粉丝点击