package sets;

import java.util.*;
import java.io.*;

public class SetOperations {
    
    public static Collection<String> loadStrings(String filename){
        Collection<String> c = new TreeSet<String>();
        try {
            BufferedReader in = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = in.readLine()) != null) {
                if(!c.add(line.trim()))
                    System.out.println("duplicate: "+line.trim());
            }
            in.close();
        } catch (IOException e) {
            System.out.println(e);
        }  
        return c;
    }
    
    public static void main(String[] args) {
        Collection<String> c1 = new ArrayList<String>();
        Collection<String> c2 = new ArrayList<String>();
        Collection<String> c3 = new ArrayList<String>();
        
        //load names from files
        System.out.println("\nLOAD DATA INTO SETS\n----------------------------------");
        c1 = loadStrings("src/sets/topNamesUT2006.txt");
        c2 = loadStrings("src/sets/topNamesCA2006.txt");
        c3 = loadStrings("src/sets/classNames.txt");
        
        System.out.println("UT names: ("+c1.size()+") "+c1);
        System.out.println("CA names: ("+c2.size()+") "+c2);
        System.out.println("  CS 235: ( "+c3.size()+") "+c3);
        System.out.println("   Total:  "+(c1.size()+c2.size()+c3.size())+" names");
        
        
        System.out.println("\nSET OPERATIONS\n----------------------------------");
        Set<String> union = new TreeSet<String>(c1);
        union.addAll(c2);
        
        System.out.println("union: ("+union.size()+")\n"+union);

        Set<String> intersection = new TreeSet<String>(c1);
        intersection.retainAll(c2);
        
        System.out.println("\nintersection: ("+intersection.size()+")\n"+intersection);

        Set<String> difference = new TreeSet<String>(c3);
        difference.removeAll(intersection);
        
        System.out.println("\n235 only (diff):  ("+difference.size()+")\n"+difference);
        
        Set<String> CAonly = new TreeSet<String>(c2);
        CAonly.removeAll(c1);
        
        System.out.println("\nCA only (diff):  ("+CAonly.size()+")\n"+CAonly);
    }
}
