Mostrando entradas con la etiqueta Iterator. Mostrar todas las entradas
Mostrando entradas con la etiqueta Iterator. Mostrar todas las entradas

miércoles, 31 de agosto de 2011

Ejercicio funciones insertar

Realizar las funciones:
  • int insertar (List<Comparable> l, Comparable d). La función recibe una lista de datos comparables, que debe estar ordenada, y un dato comparable que es el que se quiere insertar en la lista anterior. Como resultado se retorna la posición en la que ha sido insertado el dato.
  • void insertar (List<Comparable> l, Collection<Comparable> c). Recibe una lista de datos comparables, que estarán ordenados, y una colección de datos que se insertarán en el lugar correspondiente de la lista anterior. No retorna nada.
Se añade el programa principal con el que se probó la función.

public class Insertar {
    public static void main (String[] args) {
        LinkedList<String> nombres = new LinkedList<String>();
        LinkedList<String> nombres2 = new LinkedList<String>();
        int pos;
        pos = insertar((List)nombres, "Juan");
        System.out.println(nombres);
        System.out.println(pos);
        pos = insertar((List)nombres, "Antonio");
        System.out.println(nombres);
        System.out.println(pos);
        pos = insertar((List)nombres, "Manuela");
        System.out.println(nombres);
        System.out.println(pos);
        nombres2.add("Julia");
        nombres2.add("Angel");
        nombres2.add("Carlos");
        nombres2.add("Verónica");
        insertar((List)nombres, (Collection)nombres2);
        System.out.println(nombres);
    }
    public static int insertar(List<Comparable> l, Comparable d) {
        int i=0;
        ListIterator<Comparable> it = l.listIterator();
        while (i < l.size() && d.compareTo(it.next()) > 0) {
            i++;
        }
        if (i < l.size())
            it.previous();
        it.add(d);
        return i;
    }
    public static void insertar(List<Comparable> l, Collection<Comparable> c) {
        Iterator<Comparable> itC = c.iterator();
        while (itC.hasNext()) {
            insertar(l, itC.next());
        }
    }
}

lunes, 29 de agosto de 2011

Ejercicio "ListaEnlazada"

Para conocer un poco mejor el funcionamiento de la clase LinkedList<T>, realizar el siguiente ejercicio:
  1. Crear un LinkedList de Integer: LinkedList<Integer>.
  2. Añadir los números del 1 al 5.
  3. Eliminar los números 2, 3 y 4.
    1. En primer lugar con la función remove (int index) propia de los objetos LinkedList.
    2. En segundo lugar, utilizando un objeto Iterator.
NOTA: se imprime en pantalla a menudo para comprobar que todo va funcionando bien en cada paso.

public class ListaEnlazada {
    public static void main (String[] args) {
        LinkedList<Integer> lista = new LinkedList<Integer>();
        int i, j=1;
        for (i=0; i<5; i++){
            lista.add(i+1);
        }
        System.out.println(lista.toString());
        for (i=0; i<3; i++){
            lista.remove(j);
        }
        System.out.println(lista.toString());
        lista.add(1, 2);
        lista.add(2, 3);
        lista.add(3, 4);
        System.out.println(lista.toString());
        Iterator<Integer> it = lista.iterator();
        it.next();
        it.next();
        for (i=0; i<2; i++){
            it.remove();
            it.next();
        }
        it.remove();
        System.out.println(lista.toString());
    }
}

Ejercicio "Conjunto"

Crear la clase Conjunto<T>, que implementará la interfaz Set<T>. No se pondrá código a todas las funciones de Set<T>, tan sólo aquellas que nos interesan de momento.
Para almacenar todos los objetos que forman parte del conjunto, se empleará un ArrayList. Además, se creará la clase privada ParaRecorrerMiConjunto, alojada dentro de la clase Conjunto<T>, que implementa Iterator<T> y nos permite recorrer todos los elementos que forman parte del conjunto.

public class Conjunto<T> implements Set<T> {
    private ArrayList<T> datos;
    private class ParaRecorrerMiConjunto implements Iterator<T> {
        private int actual = -1;
        public boolean hasNext() {
            return actual < datos.size() - 1;
        }
        public T next() {
            if (!hasNext()) {
                throw new java.util.NoSuchElementException();
            }
            actual++;
            return datos.get(actual);
        }
        public void remove() {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
    public Conjunto() {
        datos = new ArrayList<T>();
    }
    public void clear() {
        datos.clear();
    }
    @SuppressWarnings("element-type-mismatch")
    public boolean contains(Object o) {
        return datos.contains(o);
    }
    public int size() {
        return datos.size();
    }
    public boolean isEmpty() {
        return datos.isEmpty();
    }
    public boolean add(T e) {
        if (!datos.contains(e)) {
            return datos.add(e);
        }
        return false;
    }
    @SuppressWarnings("element-type-mismatch")
    public boolean remove(Object o) {
        return datos.remove(o);
    }
    @Override
    public String toString() {
        return datos.toString();
    }
    @Override
    public boolean equals(Object o) throws ClassCastException {
        Conjunto<T> aux = (Conjunto<T>) o;
        return this.datos.containsAll(aux.datos) & aux.datos.containsAll(this.datos);
    }
    public Iterator<T> iterator() {
        return new ParaRecorrerMiConjunto();
    }
    public Object[] toArray() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public Object[] toArray(Object[] a) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean containsAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean addAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean retainAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean removeAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

MODIFICACIÓN
Para que funcione realmente como un conjunto de cosas, modificaremos la clase ParaRecorrerMiConjunto, de manera que cada vez que se instancie un iterador para recorrer los elementos del conjunto, lo haga en orden aleatorio.

public class Conjunto3<T> implements Set<T> {
    private ArrayList<T> datos;
    private class ParaRecorrerMiConjunto implements Iterator<T>{
        private int actual=-1;
        private ArrayList<T> aux;
        ParaRecorrerMiConjunto(){
            aux = new ArrayList<T>(datos);
            Collections.shuffle(aux);
        }
        public boolean hasNext() {
            return !aux.isEmpty();
        }
        public T next() {
            if(!hasNext())
                throw new java.util.NoSuchElementException();
            actual++;
            return aux.get(actual);
        }
        public void remove() {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
    public Conjunto3() {
        datos = new ArrayList<T>();
    }
    public void clear() {
        datos.clear();
    }
    @SuppressWarnings("element-type-mismatch")
    public boolean contains(Object o) {
        return datos.contains(o);
    }
    public int size() {
        return datos.size();
    }
    public boolean isEmpty() {
        return datos.isEmpty();
    }
    public boolean add(T e) {
        if (!datos.contains(e)) {
            return datos.add(e);
        }
        return false;
    }
    @SuppressWarnings("element-type-mismatch")
    public boolean remove(Object o) {
        return datos.remove(o);
    }
    @Override
    public String toString() {
        return datos.toString();
    }
    @Override
    public boolean equals(Object o) throws ClassCastException {
        Conjunto3<T> aux = (Conjunto3<T>) o;
        return this.datos.containsAll(aux.datos) & aux.datos.containsAll(this.datos);
    }
    public Iterator<T> iterator() {
        return new ParaRecorrerMiConjunto();
    }
    public Object[] toArray() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public Object[] toArray(Object[] a) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean containsAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean addAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean retainAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public boolean removeAll(Collection c) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}