Welcome 微信登录

首页 / 操作系统 / Linux / 随机子集的Java实现

获取一个集合中指定个数的随机子集(元素不重复)的实现。 package com.lavasoft.randomset; import java.util.*; /** * 数学集合概念上的随机子集的Java实现研究代码 * * @author leizhimin 2010-5-17 13:25:52 */ public class RundomSubsetToolkit { public static void main(String[] args) { //                int[] rs = randomSubset(1, 5000, 300); //                for (int r : rs) { //                        System.out.println(r); //                } //                List list = new ArrayList(10); //                list.add("a"); //                list.add("b"); //                list.add("c"); //                list.add("d"); //                list.add("e"); //                list.add("f"); //                list.add("g"); //                list.add("h"); //                list.add("i"); //                list.add("j"); //                List rs1 = randomSubset(list, 5); //                for (Object o : rs1) { //                        System.out.println(o); //                } // int[] array = {7, 9, 2, 8, 6, 4, 3}; int[] rs3 = randomSubset(array, 4); for (int i : rs3) { System.out.println(i); } Map map = new HashMap(); } /** * 获取某个范围内指定个数的随机自然数子集 * * @param beginIndex 取之范围起 * @param endIndex     取之范围止 * @param subCount     子集元素数目 * @return 自然数子集 */ public static int[] randomSubset(final int beginIndex, final int endIndex, final int subCount) { if (beginIndex < 0 || endIndex < 1 || subCount < 0 || endIndex - beginIndex < subCount) { throw new RuntimeException("获取随机子集的参数不合逻辑!"); } int[] rs = new int[subCount]; int rescount = endIndex - beginIndex + 1; int[] scope = new int[rescount]; for (int i = beginIndex; i <= endIndex; i++) scope[i - beginIndex] = i; Random random = new Random(); for (int i = 0, odd = rescount - 1; i < subCount; i++, odd--) { int ranindex = random.nextInt(odd); rs[i] = scope[ranindex]; scope[ranindex] = scope[odd]; } return rs; }