1   import java.util.ArrayList;
2   import java.util.Vector;
3   import java.util.LinkedList;
4   import java.util.Iterator;
5   import java.util.Collection;
6   import java.util.Collections;
7   import java.util.Comparator;
8   import java.util.List;
9   import java.io.*;
10  import fi.jyu.mit.ohj2.*;
11  
12  /**
13   * Esimerkki Javan algoritmien käytöstä
14   * @author Vesa Lappalainen
15   * @version 1.0, 05.03.2002
16   */
17  
18  public class AlgoritmiMalli {
19  
20    /**
21     * Luokka joka vertailee kahta kokonaislukuoliota ja
22     * palauttaa niiden järjestyksen niin, että lajittelu menee
23     * laskevaan järjestykseen.
24     */
25    public static class LaskevaInt implements Comparator {
26      public int compare(Object o1, Object o2) {
27        return ((Integer)o2).intValue() - ((Integer)o1).intValue();
28      }
29    }
30  
31    public static void tulosta(OutputStream os,  Collection luvut) {
32      PrintStream out = Tiedosto.getPrintStream(os);
33      for (Iterator i = luvut.iterator(); i.hasNext(); ) {
34        int luku = ((Integer)i.next()).intValue();
35        out.print(luku + " ");
36      }
37      out.println();
38    }
39  
40  
41    public static void main(String[] args) {
42      ArrayList luvut = new ArrayList();
43      try {
44        luvut.add(new Integer(0));  luvut.add(new Integer(2));
45        luvut.add(new Integer(99)); luvut.add(new Integer(7));
46        luvut.add(new Integer(22)); luvut.add(new Integer(71));
47      } catch ( Exception e ) {
48        System.out.println("Virhe: " + e.getMessage());
49      }
50      System.out.println(luvut);                          // [0, 2, 99, 7, 22, 71]
51  
52      Collections.sort(luvut);
53      tulosta(System.out,luvut);                          // 0 2 7 22 71 99
54      Collections.sort(luvut,new LaskevaInt());
55      tulosta(System.out,luvut);                          // 99 71 22 7 2 0
56      Collections.shuffle(luvut);
57      tulosta(System.out,luvut);                          // 99 2 7 71 0 22
58      Collections.sort(luvut,Collections.reverseOrder());
59      tulosta(System.out,luvut);                          // 99 71 22 7 2 0
60      Collections.reverse(luvut);
61      tulosta(System.out,luvut);                          // 0 2 7 22 71 99
62  
63      int suurin = ((Integer)Collections.max(luvut)).intValue();
64      System.out.println("Suurin = " + suurin);           // Suurin = 99
65      int pienin = ((Integer)Collections.min(luvut)).intValue();
66      System.out.println("Pienin = " + pienin);           // Pienin = 0
67      pienin = ((Integer)Collections.max(luvut,new LaskevaInt())).intValue();
68      System.out.println("Pienin = " + pienin);           // Pienin = 0
69  
70      List luvut2 = new LinkedList();
71      luvut2.addAll(0,luvut);
72      tulosta(System.out,luvut2);                         // 0 2 7 22 71 99
73      luvut2 = luvut.subList(2,5);
74      tulosta(System.out,luvut2);                         // 7 22 71
75  
76    }
77  }