论坛首页 入门技术论坛

如何随机抽取hashmap中的元素?

浏览 8534 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-20  
有一个hashmap,我们不知道他的key,现在想从这个hashmap中随机抽取一个元素,应该怎么做呢?
想想啊
   发表时间:2007-06-20  
List list = new ArrayList(hashmap.values());
int pos = (int)Math.floor(Math.random()*list.size());
Object obj = list.get(pos);
0 请登录后投票
   发表时间:2007-06-20  
    /**
     * 从存储机票的hashmap中随机抽取一张票
     * 先将hashmap转化成collection,再将collection转化成array,再从array中随机抽取一张票,并得到它的序列号
     * @param cabin 存储机票的hashmap
     * @param ticketCollection 存储机票的Collection
     * @param ticketsAmount 记录剩余机票的数量
     * @param ticketArray 存储机票的array
     * @param ticketsNumber 随机抽取机票的序列号
     * @return 返回抽中机票的序列号
     */
    String getRandomTicketNumber(HashMap cabin){
    Collection ticketCollection=cabin.values();
    int ticketsAmount=cabin.size();
    Tickets []ticketArray=(Tickets [])ticketCollection.toArray(new Tickets[0]);
   
    Random random=new Random();
    String ticketsNumber=ticketArray[random.nextInt(ticketsAmount)].getSerialNumberOfTicket();
    return ticketsNumber;
    }

先谢谢楼上。我用了这种方法解决了
0 请登录后投票
   发表时间:2007-06-21  
为什么多转一次到ARRAY?
0 请登录后投票
   发表时间:2007-06-21  
不转到array里,在Collection里可以实现随机取元素吗?
0 请登录后投票
   发表时间:2007-06-21  
slikyn 写道
不转到array里,在Collection里可以实现随机取元素吗?


楼上的同志不是写给你看了吗?

引用
int pos = (int)Math.floor(Math.random()*list.size());
Object obj = list.get(pos);
0 请登录后投票
   发表时间:2007-06-21  
lordhong 写道
slikyn 写道
不转到array里,在Collection里可以实现随机取元素吗?


楼上的同志不是写给你看了吗?

引用
int pos = (int)Math.floor(Math.random()*list.size());
Object obj = list.get(pos);


内部实现几乎是一样的,我倒觉得转换为数组,比转换为list好一些。
0 请登录后投票
   发表时间:2007-06-21  
int ticketsAmount=cabin.size();
Tickets []ticketArray=(Tickets [])ticketCollection.toArray(new Tickets[0]);

改为
int ticketsAmount=cabin.size();
Tickets []ticketArray=(Tickets [])ticketCollection.toArray(new Tickets[ticketsAmount]);

既然知道大小,内部再多new一个数组,就没意义了。
0 请登录后投票
   发表时间:2007-06-23  
将hashmap转为arrayList 就可以解决了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics