Hauptseite   Packages   Klassenhierarchie   ?bersicht   Auflistung der Dateien   Datenstruktur-Elemente  

IndexList.java

gehe zur Dokumentation dieser Datei
00001 /*
00002  * $Source: /shared/cvsroot/diplom/app/src/java/de/picana/clusterer/IndexList.java,v $
00003  * $Author: mstolpe $
00004  * $Date: 2003/04/22 09:51:27 $
00005  * $Revision: 1.5 $
00006  * $Release$
00007  *
00008  * Created on 21. November 2002, 14:05
00009  *
00010  * Copyright 2002 by Marco Stolpe
00011  */
00012 
00013 package de.picana.clusterer;
00014 
00015 import java.util.*;
00016 
00017 
00024 public class IndexList {
00025     
00026     private List orig_list;
00027     private ArrayList[] ref_list;
00028     private ArrayList[] iter_list;
00029     private int dim;
00030     private int size;
00031     private int[] index_first;
00032     private int[] index_last;
00033     
00034     
00035     public class Node {
00036         public int index;
00037         public int previous;
00038         public int next;
00039         
00040         public Node(int index, int previous, int next) {
00041             this.index = index;
00042             this.previous = previous;
00043             this.next = next;
00044         }
00045     }
00046     
00047     
00048     class IndexComparator implements Comparator {
00049      
00050         private int component;
00051         
00052         public IndexComparator(int component) {
00053             this.component = component;
00054         }
00055         
00056         public int compare(Object o1, Object o2) {
00057             Node n1 = (Node)o1;
00058             Node n2 = (Node)o2;
00059             MLVector vec1 = (MLVector)orig_list.get(n1.index);
00060             MLVector vec2 = (MLVector)orig_list.get(n2.index);
00061             if (vec1.value[component] > vec2.value[component])
00062                 return 1;
00063             if (vec1.value[component] < vec2.value[component])
00064                 return -1;
00065             return 0; 
00066         }
00067     }
00068 
00069     
00071     public IndexList(List list) {
00072         orig_list = list;
00073         MLVector vec = (MLVector)orig_list.get(0);
00074         size = orig_list.size();
00075         dim = vec.dim;
00076         
00077         ref_list = new ArrayList[dim];
00078         iter_list = new ArrayList[dim];
00079         index_first = new int[dim];
00080         index_last = new int[dim];
00081         
00082         Node n;
00083         int i, j;
00084         
00085         for (i=0; i < dim; i++) {
00086             
00087             ref_list[i] = new ArrayList();
00088             iter_list[i] = new ArrayList();
00089             
00090             for (j=0; j < size; j++)
00091                 ref_list[i].add(new Node(j, -1, -1));
00092             
00093             Collections.sort(ref_list[i], new IndexComparator(i));
00094             
00095             for (j=0; j < size; j++) {
00096                n = (Node)ref_list[i].get(j);
00097                n.previous = j-1;
00098                n.next = (j < size-1) ? j+1 : -1;
00099             }
00100             
00101             index_first[i] = 0;
00102             index_last[i] = size-1;
00103         }
00104     }
00105     
00106     public int getFirst(int component) {
00107         Node n = (Node)ref_list[component].get(index_first[component]);
00108         return n.index;
00109     }
00110     
00111     public int getLast(int component) {
00112         Node n = (Node)ref_list[component].get(index_last[component]);
00113         return n.index;
00114     }
00115     
00116     public IndexListIterator iterator(int component) {
00117         IndexListIterator iter = new IndexListIterator(
00118             ref_list[component], iter_list[component],
00119             index_first, index_last, -1, component, false);
00120         iter_list[component].add(iter);
00121         return iter;
00122     }
00123     
00124     public IndexListIterator iteratorReverse(int component) {
00125         IndexListIterator iter = new IndexListIterator(
00126             ref_list[component], iter_list[component],
00127             index_first, index_last, -1, component, true);
00128         iter_list[component].add(iter);
00129         return iter;
00130     }
00131     
00132     public void freeIterator(int component, IndexListIterator iter) {
00133         iter_list[component].remove(iter);    
00134     }
00135 }

Erzeugt am Tue Apr 22 11:22:55 2003 f?r Picana von doxygen1.2.18