设计RandomPool结构

import java.util.*;
//设计RandomPool结构
public class RandomPool<V>{
	
     Set<V>set=new LinkedHashSet<>();

     //插入值
     public  void insert(V key)
     {
           set.add(key);
     }
     //删除值
     public  void delete(V key)
     {
           set.remove(key);
     }
     //等概论的随机返回一个值
     public  V getRandom()
     {
           V Rv=null;
           int c=0;
           Random rand=new Random(set.size());
          c=rand.nextInt(set.size());
           //c=(int)(Math.random()*set.size());
           //获得返回值
           int k=0;
           for(V v:set)
           {  if(k==c)
              {
                Rv=v;
           	    break;
              }
              ++k;   	   
           }
           return Rv;       
     }

     //遍历Set中的所有元素
     public void printSet( )
     {
         Iterator<V>iterator=set.iterator();
         while(iterator.hasNext())
         {
         	 System.out.print(iterator.next()+" ");
         }
         System.out.println();

     }
	 public static void main(String[]args)
	 {
	      //System.out.println("HelloRandomPool");
          RandomPool<Integer>rand=new RandomPool<>();
          rand.insert(1);
          rand.insert(2);
          rand.insert(3);
          rand.insert(1);
          rand.insert(4);
          rand.printSet();
          rand.delete(1);
          rand.printSet();
          System.out.println(rand.getRandom());
	 }
}

解法二:

import java.util.HashMap;

public class Problem_11_RandomPool {

	public static class Pool<K> {
		private HashMap<K, Integer> keyIndexMap;
		private HashMap<Integer, K> indexKeyMap;
		private int size;

		public Pool() {
			this.keyIndexMap = new HashMap<K, Integer>();
			this.indexKeyMap = new HashMap<Integer, K>();
			this.size = 0;
		}

		public void insert(K key) {
			if (!this.keyIndexMap.containsKey(key)) {
				this.keyIndexMap.put(key, this.size);
				this.indexKeyMap.put(this.size++, key);
			}
		}

		public void delete(K key) {
			if (this.keyIndexMap.containsKey(key)) {
				int deleteIndex = this.keyIndexMap.get(key);
				int lastIndex = --this.size;
				K lastKey = this.indexKeyMap.get(lastIndex);
				this.keyIndexMap.put(lastKey, deleteIndex);
				this.indexKeyMap.put(deleteIndex, lastKey);
				this.keyIndexMap.remove(key);
				this.indexKeyMap.remove(lastIndex);
			}
		}

		public K getRandom() {
			if (this.size == 0) {
				return null;
			}
			int randomIndex = (int) (Math.random() * this.size);
			return this.indexKeyMap.get(randomIndex);
		}

	}

	public static void main(String[] args) {
		Pool<String> pool = new Pool<String>();
		pool.insert("zuo");
		pool.insert("cheng");
		pool.insert("yun");
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值