Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,907 questions

51,839 answers

573 users

How to select N reservoir items randomly from an array in Java

2 Answers

0 votes
import java.util.ArrayList;
import java.util.List;

public class Program {
    private static void selectReservoir(Integer[] arr, int N) {
        int size = arr.length;
        List<Integer> reservoir = new ArrayList<Integer>();

        int items = 0;
        while (items < N) {
            int i = (int)(Math.random() * size) % size; // index between 0 to size
            boolean found = false;
            
            // Check if value present in reservoir
            for (int j = 0; j < items; j++) {
                if (reservoir.contains(arr[i])) {
                    found = true;
                    break;
                }
            }
            
            // If not present add value to the reservoir 
            if (!found) {
                reservoir.add(arr[i]);
                items++;
            }
        }
        
        System.out.println(reservoir);
    }
    public static void main(String[] args) {
        Integer arr[] = { 4, 9, 14, 96, 13, 0, 3, 99, 19, 2, 80, 1, 7 };
        int N = 5;
        
        selectReservoir(arr, N);
    }
}

 
 
 
/*
run:
 
[7, 99, 1, 14, 2]
 
*/

 



answered Feb 3, 2024 by avibootz
0 votes
import java.util.ArrayList;
import java.util.List;

public class Program {
    private static List<Integer> selectReservoir(Integer[] arr, int N) {
        int size = arr.length;
        List<Integer> reservoir = new ArrayList<Integer>();

        int items = 0;
        while (items < N) {
            int i = (int)(Math.random() * size) % size; // index between 0 to size
            boolean found = false;
            
            // Check if value present in reservoir
            for (int j = 0; j < items; j++) {
                if (reservoir.contains(arr[i])) {
                    found = true;
                    break;
                }
            }
            
            // If not present add value to the reservoir 
            if (!found) {
                reservoir.add(arr[i]);
                items++;
            }
        }
        
        return reservoir;
    }
    public static void main(String[] args) {
        Integer arr[] = { 4, 9, 14, 96, 13, 0, 3, 99, 19, 2, 80, 1, 7 };
        int N = 5;
        
        List<Integer> reservoir = selectReservoir(arr, N);
        
        System.out.println(reservoir);
    }
}

 
 
 
/*
run:
 
[2, 0, 80, 7, 14]
 
*/

 



answered Feb 3, 2024 by avibootz

Related questions

1 answer 111 views
2 answers 143 views
2 answers 144 views
2 answers 121 views
2 answers 134 views
...