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 }