[JAVA]duda code

Iniciado por Pirat3net, 8 Junio 2011, 17:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Pirat3net

package lista;

import java.util.Iterator;
import java.util.LinkedList;

public class EjemploLista <T> {
   private class Nodo {
      public Nodo siguiente;

      public T    elemento;

      public Nodo(T elemento, Nodo siguiente) {
         this.siguiente = siguiente;
          this.elemento = elemento;
      }

   }
   
    private Nodo primero;

    public EjemploLista() {
        primero = null;
   }

   
   public boolean equals (Object derecho){
      if (!(derecho instanceof LinkedList<?>)) {
         return false;
      } else {
         Iterator<?> elemento = ((LinkedList<?>)derecho).iterator();
         Nodo actual = primero;
         while (actual!=null && elemento.hasNext()){
            if (!(actual.elemento).equals (elemento.next())) {
               return false;
            }
            actual = actual.siguiente;
         }
         return actual==null && !elemento.hasNext();
      }
   }
   
    public void add (T elemento) {
        if (primero == null) {
            primero = new Nodo (elemento, null);
        } else {
           Nodo actual = primero;
           while (actual.siguiente != null) {
              actual = actual.siguiente;
           }
            actual.siguiente = new Nodo (elemento, null);
        }
    }

    public String toString (){
       String str= "";
       Nodo actual = primero;
       while (actual != null) {
          str=str+'['+actual.elemento.toString()+']';
          actual = actual.siguiente;
       }
       return str;
    }

}

la duda es que no me queda nada claro el decirle a un atributo que va a ser de la clase que lo contiene. me suena a decir como si un perro fuese un perro y a demas sus patas tambien se llamasen perro. no se si me explico, no veo como no se crea error y no veo la utilidad, estoy empezando a analizar este code, si alguien me resuelve esa duda o que me oriente como se llama ese recurso para buscar info.
otra duda rapida, que se indica cuando se pasa como parametro <?>  ????
gracias

Valkyr

En primer lugar, esto deberías haberlo colocado en la sección de Java. En segundo lugar podrías haber posteado usando la etiqueta de código de javascript por ejemplo y se queda mucho más bonito, y no en rojo que la verdad molesta un poco a la vista xD.

Por otro lado no entiendo muy bien a que te refieres con la primera pregunta que haces. Si te explicas un poco mejor intentaré responderte. Si te refieres a declarar el atributo de tipo nodo, lo que estás haciendo en esta clase es declarar otra clase y hacer uso de ella como un atributo, si mal no recuerdo esto se llama clases embebidas, pero no me hagas mucho caso. La clase que estás construyendo es una clase genérica, dentro declaras otra clase de tipo nodo y por último incluyes en la clase genérica un atributo de la clase nodo.

<?> Que me corrija alguien que sepa más si estoy equivocado, pero creo que a secas no se usa de forma correcta.

Te cito unos apuntes que tengo:

Citar
Código (javascript) [Seleccionar]

public double posicionGlobal(List<? extends Deposito> depositos)


Se utiliza un comodín, que significa: permite cualquier lista genérica parametrizada a la clase Depósito o a un tipo compatible (subclase). Si pasamos como parámetro un objeto List<DepositoEstructurado>, éste será el tipo reconocido dentro del método. El tipo comodín se puede usar para declarar variables locales o atributos. No se puede utilizar el tipo comodín para construir objetos.

Espero haberte ayudado en algo con esto.

Pirat3net

tienes razon, no me di cuenta que no estaba en java, perdon, no sabia que existia el poner el code para que detectase automatico las variables etc... bueno , me referia a lo que has respondido pero creo que no lo has detectado bien.

existe una clase principal que es lista, despues se crea la clase Nodo dentro de ella, y dentro de la clase Nodo se crea el atributo Nodo. buscare por las referencias de clases embebidas que me has dado a ver si hay suerte.

Valkyr

Ah! vale, ya te entiendo. Te parece raro declarar un atributo en una clase del mismo tipo que la clase. Pues eso es bastante útil para representar estructuras de datos enlazadas.

En el ejemplo que tu pones, la clase nodo tiene dos atributos, uno es el elemento que guardará (
Código (javascript) [Seleccionar]
public T elemento que es del tipo que se especifique a la hora de crear la lista, y por otro lado otro nodo que apuntará al siguiente elemento de dicha lista.

Si te imaginas esto como celdas (casillas, o como quieras llamarlo) tu tendrás una casilla donde tienes guardado el elemento, y además, tienes una flecha que te dice donde está el siguiente elemento de la lista, que, evidentemente, será otra casilla.

Espero haberme explicado más o menos bien.

Mira, te dejo esta imagen a ver si consigues aclararte un poco.



Saludos.

Fenyxer

Cita de: Pirat3net en  9 Junio 2011, 21:31 PMexiste una clase principal que es lista, despues se crea la clase Nodo dentro de ella, y dentro de la clase Nodo se crea el atributo Nodo.

Eso es porque en Java realmente estas guardando el puntero de memoria del objeto no el objeto en si. En vez de tener un nodo dentro de un nodo, lo que tienes es la direccion de la memoria donde se aloja un nodo dentro de tu nodo. No se si me explico bien.

Asi que realmente lo que guardas es una direccion de memoria, en Java y lenguajes de este tipo suele pasar esto.