1 10 package org.mmbase.util; 11 12 import java.util.Vector ; 13 14 import org.mmbase.util.logging.Logger; 15 import org.mmbase.util.logging.Logging; 16 17 23 public class RandomThings { 24 25 private static RandomPlus rnd = new RandomPlus(); 26 private static Logger log = Logging.getLoggerInstance(RandomThings.class.getName()); 28 29 33 static public void shuffleVector(Vector v) { 34 int src,dst; 35 int siz = v.size(); 36 37 for (dst = siz-1; dst > 0; dst--) { 38 src = Math.abs(rnd.nextInt())%(dst+1); 39 swap(v,src,dst); 40 } 41 } 42 43 47 static public Vector shuffleCloneVector(Vector v) { 48 Vector newv = (Vector )v.clone(); 49 shuffleVector(newv); 50 return newv; 51 } 52 53 57 static public void shuffleArray(int arr[]) { 58 int src,dst,t; 59 int siz = arr.length; 60 61 for (dst = siz-1; dst > 0; dst--) { 62 src = Math.abs(rnd.nextInt())%(dst+1); 63 t = arr[src]; 64 arr[src] = arr[dst]; 65 arr[dst] = t; 66 } 67 } 68 69 72 private static void swap(Vector v,int i,int j) { 73 Object ob1 = v.elementAt(i); 74 Object ob2 = v.elementAt(j); 75 v.setElementAt(ob1,j); 76 v.setElementAt(ob2,i); 77 } 78 79 83 public static Vector giveRandomFrom(Vector v,int max) { 84 Vector newv = new Vector (); 85 Object ob; 86 int siz = v.size(); 87 88 if (max >= siz) { 89 newv = shuffleCloneVector(v); 90 } else { 91 int idx[] = new int[siz]; 92 int i; 93 94 for (i = 0; i < siz; i++) idx[i] = i; 95 shuffleArray(idx); 96 97 for (i = 0; i < max; i++) { 98 ob = v.elementAt(idx[i]); 99 newv.addElement(ob); 100 } 101 } 102 return newv; 103 } 104 105 109 public static void main(String args[]) { 110 Vector v = new Vector (); 111 int siz = 128; 112 int idx[] = new int[siz]; 113 int i; 114 115 for (i = 0; i < siz; i++) { 116 v.addElement(new Integer (i)); 117 idx[i] = i; 118 } 119 log.info("shuffleCloneVector " + shuffleCloneVector(v)); 120 log.info("giveRandomFrom " + giveRandomFrom(v,64)); 121 shuffleArray(idx); 122 log.info("shuffleArray " + idx); 123 for (i = 0; i < siz; i++) { 124 if (i == 0) 125 log.info("" + idx[i]); 126 else 127 log.info("," + idx[i]); 128 } 129 log.info(""); 130 } 131 } 132 | Popular Tags |