001    import java.util.ArrayList;
002    import java.util.Vector;
003    import java.util.LinkedList;
004    import java.util.Iterator;
005    import java.util.Collection;
006    import java.util.Collections;
007    import java.util.Comparator;
008    import java.util.List;
009    import java.io.*;
010    import fi.jyu.mit.ohj2.*;
011    
012    /**
013     * Esimerkki Javan algoritmien käytöstä Java 1.5:n geneerisyyden
014     * ja "autoboxin" avulla.  Käytössä myös uusi for-silmukka.
015     * @author Vesa Lappalainen
016     * @version 1.0, 05.03.2002
017     * @version 1.1, 01.03.2005
018     */
019    
020    public class AlgoritmiMalliGen {
021    
022      /**
023       * Luokka joka vertailee kahta kokonaislukuoliota ja
024       * palauttaa niiden järjestyksen niin, että lajittelu menee
025       * laskevaan järjestykseen.
026       */
027      public static class LaskevaInt implements Comparator<Integer> {
028        public int compare(Integer o1, Integer o2) {
029          return o2 - o1;
030        }
031      }
032    
033      public static void tulosta(OutputStream os,  Collection<Integer> luvut) {
034        PrintStream out = Tiedosto.getPrintStream(os);
035        for (Integer i : luvut ) {
036          int luku = i;
037          out.print(luku + " ");
038        }
039        out.println();
040      }
041    
042    
043      public static void main(String[] args) {
044        ArrayList<Integer> luvut = new ArrayList<Integer>();
045        try {
046          luvut.add(0);  luvut.add(2);
047          luvut.add(99); luvut.add(7);
048          luvut.add(22); luvut.add(71);
049        } catch ( Exception e ) {
050          System.out.println("Virhe: " + e.getMessage());
051        }
052        System.out.println(luvut);                          // [0, 2, 99, 7, 22, 71]
053    
054        Collections.sort(luvut);
055        tulosta(System.out,luvut);                          // 0 2 7 22 71 99
056        Collections.sort(luvut,new LaskevaInt());
057        tulosta(System.out,luvut);                          // 99 71 22 7 2 0
058        Collections.shuffle(luvut);
059        tulosta(System.out,luvut);                          // 99 2 7 71 0 22
060        Collections.sort(luvut,Collections.reverseOrder());
061        tulosta(System.out,luvut);                          // 99 71 22 7 2 0
062        Collections.reverse(luvut);
063        tulosta(System.out,luvut);                          // 0 2 7 22 71 99
064    
065        int suurin = Collections.max(luvut);
066        System.out.println("Suurin = " + suurin);           // Suurin = 99
067        int pienin = Collections.min(luvut);
068        System.out.println("Pienin = " + pienin);           // Pienin = 0
069        pienin = Collections.max(luvut,new LaskevaInt());
070        System.out.println("Pienin = " + pienin);           // Pienin = 0
071    
072        List<Integer> luvut2 = new LinkedList();
073        luvut2.addAll(0,luvut);
074        // luvut2.add("Kissa"); // ei mahdollista jos tyyppi ilmoitettu listalle
075        tulosta(System.out,luvut2);                         // 0 2 7 22 71 99
076        luvut2 = luvut.subList(2,5);
077        tulosta(System.out,luvut2);                         // 7 22 71
078    
079      }
080    }