java再谈集合随机

之前有谈过集合的随机返回,由于项目的需要必须要在集合的第一位体现出随机,所以我们采用了下面的方法:

 

public class FirstIndexRandom 
{
public static void main(String[] args)
{
	
}
	
	private static List<Integer> getNewOrderList(List<Integer> value)  
	{  
	   Random rand = new Random();  
	   int listIndex = rand.nextInt(value.size());  
	   List<Integer> returnList = new ArrayList<Integer>();  
	    returnList.add(value.get(listIndex));  
	    value.remove(listIndex);  
	    returnList.addAll(value);  
	    return returnList;  
	}
}


随机选择集合中元素的一个下标,和第一位做交换,产生一次伪随机。

 

其实jdk中Collections(集合工具类)中,提供了对整个集合做一个随机返回的方法:

Collections.shuffle(list);


该方法能够打散集合中元素的顺序

下面我们看一下shuffle中的源码:

    public static void shuffle(List list1)
    {
        Random random = r;
        if(random == null)
            r = random = new Random();
        shuffle(list1, random);
    }
    public static void shuffle(List list1, Random random)
    {
        int i = list1.size();
        if(i < 5 || (list1 instanceof RandomAccess))
        {
            for(int j = i; j > 1; j--)
                swap(list1, j - 1, random.nextInt(j));

        } else
        {
            Object aobj[] = list1.toArray();
            for(int k = i; k > 1; k--)
                swap(aobj, k - 1, random.nextInt(k));

            ListIterator listiterator = list1.listIterator();
            for(int l = 0; l < aobj.length; l++)
            {
                listiterator.next();
                listiterator.set(aobj[l]);
            }

        }
    }

在调用shuffle(List list)方法时,方法内部产生了一个随机数,接着调用下面的shuffle(list,random)方法。

这里实际上是运用了list中的set方法的特性,可以看一下jdk中的解释。

 

set方法可以替换指定下标元素,而本身会有一个返回值,就是被替换掉的元素。

详细的可以研究一下list中的set的方法。 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值