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ä
014     * @author Vesa Lappalainen
015     * @version 1.0, 05.03.2002
016     */
017    
018    public class AlgoritmiMalli {
019    
020      /**
021       * Luokka joka vertailee kahta kokonaislukuoliota ja
022       * palauttaa niiden järjestyksen niin, että lajittelu menee
023       * laskevaan järjestykseen.
024       */
025      public static class LaskevaInt implements Comparator {
026        public int compare(Object o1, Object o2) {
027          return ((Integer)o2).intValue() - ((Integer)o1).intValue();
028        }
029      }
030    
031      public static void tulosta(OutputStream os,  Collection luvut) {
032        PrintStream out = Tiedosto.getPrintStream(os);
033        for (Iterator i = luvut.iterator(); i.hasNext(); ) {
034          int luku = ((Integer)i.next()).intValue();
035          out.print(luku + " ");
036        }
037        out.println();
038      }
039    
040    
041      public static void main(String[] args) {
042        ArrayList luvut = new ArrayList();
043        try {
044          luvut.add(new Integer(0));  luvut.add(new Integer(2));
045          luvut.add(new Integer(99)); luvut.add(new Integer(7));
046          luvut.add(new Integer(22)); luvut.add(new Integer(71));
047        } catch ( Exception e ) {
048          System.out.println("Virhe: " + e.getMessage());
049        }
050        System.out.println(luvut);                          // [0, 2, 99, 7, 22, 71]
051    
052        Collections.sort(luvut);
053        tulosta(System.out,luvut);                          // 0 2 7 22 71 99
054        Collections.sort(luvut,new LaskevaInt());
055        tulosta(System.out,luvut);                          // 99 71 22 7 2 0
056        Collections.shuffle(luvut);
057        tulosta(System.out,luvut);                          // 99 2 7 71 0 22
058        Collections.sort(luvut,Collections.reverseOrder());
059        tulosta(System.out,luvut);                          // 99 71 22 7 2 0
060        Collections.reverse(luvut);
061        tulosta(System.out,luvut);                          // 0 2 7 22 71 99
062    
063        int suurin = ((Integer)Collections.max(luvut)).intValue();
064        System.out.println("Suurin = " + suurin);           // Suurin = 99
065        int pienin = ((Integer)Collections.min(luvut)).intValue();
066        System.out.println("Pienin = " + pienin);           // Pienin = 0
067        pienin = ((Integer)Collections.max(luvut,new LaskevaInt())).intValue();
068        System.out.println("Pienin = " + pienin);           // Pienin = 0
069    
070        List luvut2 = new LinkedList();
071        luvut2.addAll(0,luvut);
072        tulosta(System.out,luvut2);                         // 0 2 7 22 71 99
073        luvut2 = luvut.subList(2,5);
074        tulosta(System.out,luvut2);                         // 7 22 71
075    
076      }
077    }