KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > RandomThings


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util;
11
12 import java.util.Vector JavaDoc;
13
14 import org.mmbase.util.logging.Logger;
15 import org.mmbase.util.logging.Logging;
16
17 /**
18  * Class for doing random things.
19  * @deprecated-now not used anywhere
20  * @author Rico Jansen
21  * @version $Id: RandomThings.java,v 1.9 2004/09/30 14:07:13 pierre Exp $
22  */

23 public class RandomThings {
24
25     private static RandomPlus rnd = new RandomPlus();
26     // logger
27
private static Logger log = Logging.getLoggerInstance(RandomThings.class.getName());
28
29     /**
30      * Shuffle a Vector until it is a Random mess
31      * @deprecated java.util.Collections#shuffle
32      */

33     static public void shuffleVector(Vector JavaDoc 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     /**
44      * Return a new Shuffled vector
45      * @deprecated java.util.Collections#shuffle and clone
46      */

47     static public Vector JavaDoc shuffleCloneVector(Vector JavaDoc v) {
48         Vector JavaDoc newv = (Vector JavaDoc)v.clone();
49         shuffleVector(newv);
50         return newv;
51     }
52
53     /**
54      * Shuffle an integer array
55      * @deprecated use java.util.
56      */

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     /**
70      * @deprecated use Collections.swap
71      */

72     private static void swap(Vector JavaDoc v,int i,int j) {
73         Object JavaDoc ob1 = v.elementAt(i);
74         Object JavaDoc ob2 = v.elementAt(j);
75         v.setElementAt(ob1,j);
76         v.setElementAt(ob2,i);
77     }
78
79     /**
80      * Return 'max' random elements from a Vector.
81      * No duplicates will be given.
82      */

83     public static Vector JavaDoc giveRandomFrom(Vector JavaDoc v,int max) {
84         Vector JavaDoc newv = new Vector JavaDoc();
85         Object JavaDoc 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     /**
106      * entrypoint for calling this class from the commandline
107      * For testing
108      */

109     public static void main(String JavaDoc args[]) {
110         Vector JavaDoc v = new Vector JavaDoc();
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 JavaDoc(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