-2
import java.util.ArrayList;

public class Testing {
    public static void main(String[] args) {
        ArrayList<Double> valid = new ArrayList<Double>();
        ArrayList<Double> result = new ArrayList<Double>();
        valid.add(0.05);
        valid.add(0.05);
        valid.add(0.1);
        getSum(valid, result, 0, 0);
        System.out.println(result);
    }

    public static void getSum(ArrayList<Double> valid, ArrayList<Double> result, int start, double sum) {
        if (valid.size() == start) {
            result.add(sum);
            return;
        }

        double value = sum + valid.get(start);

        getSum(valid, result, start + 1, value);
        getSum(valid, result, start + 1, sum);
    }
}

I want to not even enter the duplicates into the result arrayList, as removing duplicates after will result in not enough memory, as the result arrayList gets too big too fast. How do I do this?

Edit: A hashset suffices.

Raymo111
  • 514
  • 8
  • 24

3 Answers3

0

Using interfaces gives greater code universality, in java 8, you can use stream and method distinct():

List<Double> valid = new ArrayList<>();
valid.add(0.05);
valid.add(0.05);
valid.add(0.1);
List<Double> removedDuplicates = valid.stream().distinct().collect(Collectors.toList());
0

I ended up using a set instead of an ArrayList like Kon and Sam_ferree suggested. This ended up working:

import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;

public class Testing {
    public static void main(String[] args) {
        ArrayList<Double> valid = new ArrayList<Double>();
        Set<Double> result = new TreeSet<Double>();
        valid.add(0.05);
        valid.add(0.05);
        getSum(valid, result, 0, 0);
        System.out.println(result);
    }

    public static void getSum(ArrayList<Double> valid, Set<Double> result, int start, double sum) {
        if (valid.size() == start) {
            result.add(sum);
            return;
        }

        double value = sum + valid.get(start);

        getSum(valid, result, start + 1, value);
        getSum(valid, result, start + 1, sum);
    }
}
Raymo111
  • 514
  • 8
  • 24
-1

Use a Set instead of a List, like HashSet or TreeSet

Sets by definition don't allow duplicates, so changing that datatype is the only change your code needs.

sam_ferree
  • 57
  • 5