Salve a tutti...la domanda è molto semplice; ho creato un metodo che riceve in ingresso un insieme di Integer e restituisce tutti i possibili sottoinsiemi...mi succede pero una cosa che non mi era mai capitata:

se dopo aver chiamato il metodo sottoinsiemi provo a stampare l'oggetto che gli ho passato a questo metodo, l'oggetto risulta vuoto. Detto in altro parole: nel main richiamo il metodo sottoinsiemi passandogli "set2"....se poi provo a stampare set2 mi restituisce l'insieme vuoto....mentre io vorrei che l'insieme set2 rimanesse intatto...dove sbaglio??? quale accorgimento potrei usare...?? grazie in anticipo...

codice:
private static Set<Set<Integer>> sottoinsiemi(Set<Integer> s) {
                if(s.isEmpty()){
                Set<Set<Integer>> res = new HashSet<Set<Integer>>();
                res.add(s);
            
                return res;
                } 
		
		Integer e = s.iterator().next();
		s.remove(e);
		Set<Set<Integer>> res = sottoinsiemi(s);
		
		Set<Set<Integer>> newSets = new HashSet<Set<Integer>>();
		for (Iterator<Set<Integer>> iterator = res.iterator(); iterator.hasNext();) {
			Set<Integer> set = iterator.next();
			Set<Integer> newSet = new HashSet<Integer>();
			newSet.addAll(set);
			newSet.add(e);
			newSets.add(newSet);
		}
		res.addAll(newSets);
		return res;
	}

main: 

Set<Integer> set2 = new HashSet<Integer>();
                set2.add(1);
                set2.add(2);
                set2.add(3);

Set<Set<Integer>> subsets = sottoinsiemi(set2);
System.out.println("iniziale : "+set2); // vuoto ???????????????????????????????'